我的数据模型大致如下:
thingy - <端口> - <技术
换句话说,我有一个东西的集合,它们有一个或多个“端口”,每个端口都有一个或多个技术。技术表是一个查找表,我用它来填充前端的下拉列表,用户可以使用该下拉列表将技术分配给端口。
问题在于我的新东西和端口的保存代码。我的更新工作正常。要添加第一个东西,我会执行以下操作:
dbcontext.entry(thingy).State = EntityState.Added;
这将在上下文中关联的thingy和对象图(即所有子对象)都处于“添加”状态。
这似乎有效,但它实际上做的是在我的技术表中插入重复的技术。我在所有技术上设置了ID,外键/关系/等都看起来很好。
当我尝试做一些偷偷摸摸的事情,例如迭代所有技术并将其状态更改为EntityState.Unchanged时,我收到以下错误:
“保存或接受更改失败,因为'Technology'类型的多个实体具有相同的主键值。请确保显式设置主键值是唯一的。确保在数据库中正确配置数据库生成的主键在Entity Framework模型中。使用Entity Designer进行Database First / Model First配置。使用'HasDatabaseGeneratedOption'流畅API或'DatabaseGeneratedAttribute'进行Code First配置。“
同样,使用find报告同样的问题:
dbcontext.Technologies.Find(tech.TechnologyID);
“在添加状态中找到与给定匹配的多个实体 主键值。“
有谁知道我如何解决这个问题,以便EF正确构建到EXISTING技术对象的映射,而不是每次都添加一个新的?