实体框架 具有自定义属性的同一表的多对多关系

本文关键字:框架 关系 自定义属性 实体 | 更新日期: 2023-09-27 18:36:09

我正在使用带有 Identity 的标准 MVC 项目。我希望用一些自定义属性制作一个应用程序用户的多对多关系的Friend表。

我希望表格看起来像这样:

Friend
----------
UserId ( From ApplicationUser)
FriendID ( From ApplicationUser)
IsApproved ( Bool )
DateCreated ( DateTime )

我知道如何用 2 张桌子制作多对多,但我找不到只用 1 张桌子制作的方法。
有人可以帮忙吗?

编辑:

是的,它是代码优先。这是我修改的标准应用程序用户类。

public class ApplicationUser : IdentityUser
    {
        public string FirstName { get; set; }
        public string MiddleName { get; set; }
        public string LastName { get; set; }
        public DateTime DateOfBirth { get; set; }
        public string Phone { get; set; }
        public string Mobile { get; set; }
        public string Work { get; set; }
        public string DisplayName
        {
            get
            {
                return this.FirstName + " " + this.LastName;
            }
        }
        public virtual ICollection<Image> Images { get; set; }
        public virtual ICollection<Like> Likes { get; set; }
        public virtual ICollection<Post> PostFrom { get; set; }
        public virtual ICollection<Post> PostTo { get; set; }
        public virtual ICollection<Comment> Comments { get; set; }

        public virtual ICollection<ApplicationUser> Followers { get; set; }
        public virtual ICollection<ApplicationUser> Following { get; set; }

        public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
        {
            // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
            var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
            // Add custom user claims here
            return userIdentity;
        }
    }

实体框架 具有自定义属性的同一表的多对多关系

您可以对模型使用数据注释,如下所示:

public class Friend
{
    public int User_Id;
    [ForeignKey("User_Id")]
    public ApplicationUser User;
    public int Friend_Id;
    [ForeignKey("Friend_Id")]
    public ApplicationUser Friend;
    public bool IsApproved;
    public DateTime DateCreated;
}

这里有一个关于代码优先的指南,可能会对你有很大帮助:实体框架代码优先。

这里有一个关于数据注释 - 外键属性的具体指南。