You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向含联合主键的SQL Server CE表插入数据时出错

解决SQL Server CE联合主键表添加时的映射错误

错误原因

你遇到的No mapping exists from DbType System.Collections.ObjectModel.ReadOnlyCollection1[System.Object] to a known SqlCeType`错误,本质是代码里把集合类型当成单个字段值传给了数据库参数——SQL Server CE没法把集合类型映射成它支持的字段类型。

具体修复步骤

  • 检查参数获取逻辑
    找到处理Add提交的代码,别用Request.Form.GetValues("bandID")这类返回集合的方法,它会返回ReadOnlyCollection<Object>。改用Request.Form["bandID"]或者强类型绑定,确保拿到的是单个值。

  • 修正参数传递代码
    错误示例(别这么写):

    var bandId = Request.Form.GetValues("bandID");
    var memberId = Request.Form.GetValues("MemberID");
    // 把集合当参数传进SQL
    

    正确写法:

    // 先转成对应数值类型,确保是单个值
    var bandId = int.Parse(Request.Form["bandID"]);
    var memberId = int.Parse(Request.Form["MemberID"]);
    

    如果用EF操作,要保证实体对象的两个主键字段是单个数值:

    var newEntry = new BandsMembers
    {
        bandID = selectedBandId, // 单个int值,不是集合
        MemberID = selectedMemberId
    };
    db.BandsMembers.Add(newEntry);
    db.SaveChanges();
    
  • 检查前端表单
    确认bandID和MemberID对应的输入控件(下拉框、单选框等),每个控件的name唯一,且只能选单个值——别出现多个同名控件导致提交时返回集合。

  • 验证模型绑定(如果用了的话)
    检查BandsMembers模型类的定义,两个主键字段必须是单个值类型(比如int),不能是集合或IEnumerable:

    public class BandsMembers
    {
        public int bandID { get; set; }
        public int MemberID { get; set; }
    }
    

内容的提问来源于stack exchange,提问作者user1818290

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 07:48:14