如何解决ASP.NET,实体框架代码第一个多对多自引用列表
我正在尝试使用ASP.NET中的Code First重新创建关注者/关注者系统。我找不到正确的方法来实现这一点(MVC模式)。 有我的“用户”课程:
public class User
{
public User()
{
this.Followers = new HashSet<User>();
this.Follows = new HashSet<User>();
}
[Key]
public int UserId { get; set; }
public string Mail { get; set; }
public string Password { get; set; }
public string LastName { get; set; }
public string FirstName { get; set; }
public string Locality { get; set; }
public string PhoneNumber { get; set; }
public string Description { get; set; }
public string ProfileImage { get; set; }
public virtual ICollection<User> Followers { get; set; }
public virtual ICollection<User> Follows { get; set; }
}
使用此dbcontext类,我已经能够使用名为“ Subscriptions”的联接表创建数据库:
public FakebookDBContext()
: base("name=FakebookDBContext")
{
}
public DbSet<User> Users { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>()
.HasMany<User>(fer => fer.Follows)
.WithMany(fow => fow.Followers)
.Map(ff =>
{
ff.MapLeftKey("UserFollowerId");
ff.MapRightKey("UserFollowedId");
ff.ToTable("Subscription");
});
}
在测试与“用户”类(自动生成)相关的Api时,我注意到两件事:
POST的示例:
输入:
{
"$id" : 1,"Followers": [
{
"$id": "2","Followers": [],"Follows": [{"$ref": "1"}],"UserId": 1,"Mail": null,"Password": null,"LastName": null,"FirstName": null,"Locality": null,"PhoneNumber": null,"Description": null,"ProfileImage": null
}
],"Follows": [],"ProfileImage": null
}
输出:
{
"$id": "1","UserId": 24,"ProfileImage": null,"Followers": [
{
"$id": "2","UserId": 25,"Follows": [
{
"$ref": "1"
}
]
}
],"Follows": []
}
我得出结论,我无法正确地将用户链接在一起。似乎没有找到对现有用户的引用,而framework(?)只是创建了新对象。
我想避免创建“ Subscription”类,并以这种方式保留User模型(如果可能)。我在IT领域还很陌生,所以随时可以就如何更好地实现这一点提供任何建议。谢谢!
解决方法
我认为最简单的方法是创建另外两个类。一个用于追随者,一个用于追随者。每个课程将有一个User
和一个ICollection<User>
我知道您想避免创建新类,但这是告诉EF您想做什么的最简单方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。