【发布时间】:2016-03-02 11:54:41
【问题描述】:
这是实体和上下文代码:
public class Family
{
public int FamilyID { get; set; }
public String address { get; set; }
public virtual ICollection<Member> FamilyMembers { get; set; }
}
public class Member
{
[Index("MemberUniqueID", IsUnique = true)]
public int MemberID { get; set; }
[StringLength(50)] [Index("MemberUniqueIndex", 1, IsUnique = true)]
public String name { get; set; }
[StringLength(50)] [Index("MemberUniqueIndex", 2, IsUnique = true)]
public String surname { get; set; }
public int age { get; set; }
public int FamilyID { get; set; }
public virtual Family Family { get; set; }
}
public class Bicycle
{
public int BicycleID { get; set; }
public virtual Member Owner { get; set; }
}
public class MyContext : DbContext
{
public MyContext : base () { }
public DbSet<Member> MemberDB { get; set; }
public DbSet<Family> FamilyDB { get; set; }
public DbSet<Bicycle> BicycleDB { get; set; }
}
现在,我添加每个示例,添加它们和SaveChanges();。然后我尝试运行这段代码:
public void bicycle_set_FK(int IDbicycle, int IDmember)
{
var bicycleToFind = BicycleDB.Find(IDbicycle);
var memberToSetAsFK = MemberDB.Find(IDmember);
bicycleToFind.Owner = memberToSetAsFK;
SaveChanges();
}
结果,我得到了这个错误:
未处理的类型异常 'System.Data.Entity.Infrastructure.DbUpdateException' 发生在 EntityFramework.dll 无法在对象中插入重复的键行 具有唯一索引“MemberUniqueIndex”的“dbo.Members”。重复键 值为(约翰,史密斯)。声明已终止。
奇怪的是,如果我在添加示例的同时运行该方法,该方法可以正常工作并按预期设置 FK。但是,如果我首先在第一次运行代码时添加示例,然后尝试在第二次运行代码时设置 FK,则会引发该异常。
编辑:
好的,所以我按照建议做了,在阅读了你链接的文章后,我有这个:
[ForeignKey("MemberID")]
public int? OwnerID { get; set; }
public virtual Member MemberID { get; set; }
方法如下:
public void bicycle_set_FK(int IDbicycle, int IDmember)
{
var bicycleToFind = BicycleDB.Find(IDbicycle);
bicycleToFind.MemberID = null;
bicycleToFind.OwnerID = IDmember;
SaveChanges();
}
但这会产生一个新问题:
“违反PRIMARY KEY约束'PK_dbo.Members'。无法插入 对象“dbo.Members”中的重复键。重复键值为 (0)。\r\n语句已终止。"
我使用的值是 1 和 3 (bicycle_set_FK(1, 3);)。成员包含 3 行 ID:1、2 和 3。那么它在哪里找到零,因为它不在数据库中,我也没有在代码中的任何位置输入它?
还有一件事:这篇文章没有提到如何在一对多的关系中解决这个问题。如何在 Family 和 Member 之间添加 FK?我是否添加了一些属性,例如public List<Member> FamilyMembersFK?
【问题讨论】:
标签: c# entity-framework ef-code-first entity-framework-6 foreign-key-relationship