【发布时间】:2018-02-05 14:33:50
【问题描述】:
我正在尝试使用 EF Code First 开发一个包含“在线朋友”功能的项目。我必须将所有用户的朋友存储在数据库中。我有用于用户的“用户”POCO 类和用于保存用户朋友的“FriendRelationship”POCO 类。这些 POCO 类是:
[Table("UserTable")]
public class User
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
//other properties
public int? FriendListID {get; set;}
public virtual FriendRelationship FriendList { get; set; }
}
[Table("FriendRelationshipTable")]
public class FriendRelationship
{
public FriendRelationship()
{
Friends = new List<User>();
}
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
public virtual List<User> Friends { get; set; }
}
我的 Fluent API 是:
modelBuilder.Entity<User>()
.HasOptional(o => o.FriendList)
.WithMany(m => m.Friends)
.HasForeignKey(fk => fk.FriendListID)
.WillCascadeOnDelete(false);
我在用户对象的第一次创建时在用户对象中创建朋友对象(这个用户对象添加到控制器的数据库中。):
public class CreateAccountModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
HttpRequestBase request = controllerContext.HttpContext.Request;
//other actions
User _user = new User();
_user.FriendList = new FriendRelationship();
//other actions and return
}
}
最后,我的朋友加法尝试:
static void AddFriendByManually()
{
using (var context = _liveCampusContext)
{
User Admin2 = context.Users.SingleOrDefault(w => w.Username == "Admin2");
User Admin = context.Users.SingleOrDefault(w => w.Username == "Admin");
User AdminVader= context.Users.SingleOrDefault(w => w.Username == "AdminVader");
Admin.FriendList.Friends.Add(Admin2);
Admin.FriendList.Friends.Add(AdminVader);
Admin2.FriendList.Friends.Add(Admin);
Admin2.FriendList.Friends.Add(AdminVader);
AdminVader.FriendList.Friends.Add(Admin2);
AdminVader.FriendList.Friends.Add(Admin);
context.SaveChanges();
}
}
执行 context.SaveChanges() 行时,抛出异常:
违反了多重性约束。关系“TeachLearnWeb.Data.DbContextFolder.User_FriendList”的角色“User_FriendList_Target”具有多重性 1 或 0..1。
我错过了什么?谢谢。
【问题讨论】:
标签: asp.net-mvc entity-framework