微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ASP.NET,实体框架代码第一个多对多自引用列表

如何解决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时,我注意到两件事:

  1. 与跟随现有用户用户向我的API发送POST请求时,它为数据库创建了两个新用户订阅表已正确填写)

  2. 在向我的API发送PUT请求以尝试更改现有用户时,“订阅”表保持不变。

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 举报,一经查实,本站将立刻删除。