【发布时间】:2014-07-28 04:02:45
【问题描述】:
我的域类:
public class Address
{
[Key]
public virtual string AddressId { get; set; }
public virtual Site Site { get; set; }
}
public class Site
{
[Key]
public virtual int SiteId { get; set; }
public virtual Address Address { get; set; }
}
使用 Fluent API 进行映射:
public class SiteMappings : EntityTypeConfiguration<Site>
{
public SiteMappings()
{
HasRequired(s => s.Address)
.WithOptional(a => a.Site)
.Map(s => s.MapKey("AddressId"))
.WillCascadeOnDelete(false);
}
}
种子方法:
var addresses = new List<Address>
{
new Address { AddressId = "1" }
};
addresses.ForEach(s => context.Addresses.AddOrUpdate(p => p.AddressId, s));
var sites = new List<Site>
{
new Site { SiteId = 1, Address = addresses.Single(s => s.AddressId.Equals("1"))}
};
sites.ForEach(s => context.Sites.AddOrUpdate(p => p.SiteId, s));
错误:
Violation of PRIMARY KEY constraint 'PK_dbo.Addresses'. Cannot insert duplicate key in object 'dbo.Addresses'. The duplicate key value is (1)
似乎是当我尝试添加一个新的“站点”时,新的“地址”也会被插入。 如何避免这种情况?如何在我之前添加的 DBcontext 中插入现有的“地址”。 我是 Entity Framework 的新手,非常感谢您的帮助。 提前致谢!
【问题讨论】:
-
您好,我遇到了类似的问题。我有类似的课程,我试图从 Model2s 的下拉列表中保存一个带有所选选项的 Model1。我的错误是“'Mydbcontext' 中的实体参与了 'model1_model2' 关系。找到了 0 个相关的 'model1_model2_Target'。预计有 1 个 'model1_model2_Target'”它是一对一的关系。
-
我能够通过插入一个由当前上下文管理的“地址”来解决这个问题。
new Site { SiteId = 1, Address = context.Addresses.FirstOrDefault(a => a.AddressId.Equals("1"))}
标签: c# entity-framework dbcontext entity-framework-migrations ef-fluent-api