我正在尝试使用外键关联 http://weblogs.asp.net/manavi/archive/2011/05/01/associations-in-ef-4-1-code-first-part-5-one-to-one-foreign-key-associations.aspx在 EF 中实现一对一关联的方法。就我而言,用户和团队之间存在关联,并且我需要在每个用户和团队中都有一个导航属性。
我在尝试保存数据时遇到了问题。
模型如下所示:
public class Team
{
public int ID { get; set; }
public string Name { get; set; }
public int OwnerID { get; set; }
public virtual User Owner { get; set; }
}
public class User
{
public int ID { get; set; }
public string UserName { get; set; }
public int TeamID { get; set; }
public virtual Team Team { get; set; }
}
我将这些位添加到DbContext
OnModelCreating()
,如上面引用的博客文章中所述:
modelBuilder.Entity<User>()
.HasRequired(u => u.Team)
.WithMany()
.HasForeignKey(u => u.TeamID);
modelBuilder.Entity<Team>()
.HasRequired(t => t.Owner)
.WithMany()
.HasForeignKey(t => t.OwnerID)
.WillCascadeOnDelete(false);
现在当添加这样的数据时:
User u = new User();
u.UserName = "farinha";
Team t = new Team("Flour Power");
u.Team = t;
t.Owner = u;
context.Users.Add(u);
context.Teams.Add(t);
context.SaveChanges();
甚至像这样:
User u = new User();
u.UserName = "farinha";
u.Team = new Team("Flour Power");
context.Users.Add(u);
context.SaveChanges();
我收到以下错误:
无法确定有效的排序
对于相关操作。依赖关系
可能由于外键而存在
约束、模型要求或
存储生成的值。
知道如何解决这个问题吗?我保存数据的方式是否错误?
提前致谢
您没有以错误的方式保存数据,但它根本无法工作,因为您定义了双向依赖关系。仅当与已保存的用户相关时才能保存团队,并且仅当与现有团队相关时才能保存用户。您必须通过将外键属性标记为可为空来使一个关系成为可选(例如TeamId
in User
):
public class User
{
public int ID { get; set; }
public string UserName { get; set; }
public int? TeamID { get; set; }
public virtual Team Team { get; set; }
}
然后你必须保存User
首先实体,然后你可以保存Team
.
User u = new User();
u.UserName = "farinha";
context.Users.Add(u);
context.SaveChanges();
u.Team = new Team { Name = "Flour Power", OwnerID = u.ID };
context.SaveChanges();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)