c# – 属性“name”是对象的关键信息的一部分,不能修改.实体框架

我正在尝试更新一个记录,并在context.SaveChanges();之后得到这个错误信息.

The property ‘name’ is part of the object’s key information and cannot be modified.

以下是更新功能代码

if (context.EAT_SourceNames.Any(e => e.name == newSourceName))
 {
    MessageBox.Show("Name already exists in the Database");
 }
 else
 {
    var nametoUpdate = context.EAT_SourceNames.SingleOrDefault(e => e.name == sourceName.name);
    if (nametoUpdate != null)
    {
       nametoUpdate.name = newSourceName;
       context.SaveChanges();
       RefreshDGVs();
     }
 }

我的SourceNames类看起来像下面这样:

public EAT_SourceNames()
    {
        this.EAT_Sources = new ObservableListSource<EAT_Sources>();
    }

    public string name { get; set; }
    public string version_id { get; set; }
    public string allocation_name { get; set; }

搜索类似的问题,但找不到任何工作的解决方案.

解决方法

看到yildizm85的答案到这个问题: entity framework not working on table without identity column

“实体框架”需要一个主键从数据库生成一个模型,如果一个表上没有主键,它将简单地选择不可为空的列作为连接的主键,并且实体将被读/只.

看看您的EAT_SourceNames对象,它看起来没有主键字段,所以Entity Framework使用列’name’作为复合键的一部分,这意味着它是只读的.

解决方案是将主键字段添加到EAT_SourceNames,然后您的“名称”字段将不再是主键的一部分.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...