实体框架M2M问题将外键添加到查找表

时间:2014-09-18 22:14:03

标签: .net entity-framework foreign-keys duplicates

我的数据模型大致如下:

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技术对象的映射,而不是每次都添加一个新的?

0 个答案:

没有答案