实体框架中的1:1关系

本文关键字:关系 框架 实体 | 更新日期: 2023-09-27 18:06:51

我需要ApplicationUser与实体框架中我自己的类之间的1:1关系。

我这样做:

public class ApplicationUser : IdentityUser
{
    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
    {
        var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
        return userIdentity;
    }
    /*Realations*/
    public virtual ICollection<Comment> Comments { get; set; }
    public virtual Posts Post { get; set; }
}

public class Posts : System.Object
{
    public Posts()
    {
        this.PostDate = DateTime.Now;
        this.PostViews = 0;
        this.PostPic = "d.jpg";
    }
    [Key]
    public int PostID { get; set; }
    public string PostName { get; set; }
    public string PostSummery { get; set; }
    public string PostDesc { get; set; }
    public string PostPic { get; set; }
    public DateTime PostDate { get; set; }
    public int PostViews { get; set; }
    public string postMetaKeys { get; set; }
    public string PostMetaDesc { get; set; }

    public string UserId { get; set; }
    [Key, ForeignKey("UserId")]
    public virtual ApplicationUser ApplicationUser { get; set; }

    public int CategoryID { get; set; }
    [Key, ForeignKey("CategoryID")]
    public virtual Categories Category { get; set; }
    public virtual ICollection<Comment> commnets {get; set;}
}

但是当我在Nuget控制台写命令"添加迁移关系"时,我得到了一个异常。

无法确定对象之间关联的主要端"FinalKaminet.Models类型。ApplicationUser'和'Models.Posts'。的此关联的主体端必须使用关系流畅API或数据注释。

我还在IdentityModels中添加了下面的代码,但显示了另一个错误:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder); 

        modelBuilder.Entity<ApplicationUser>()
        .HasOptional(f => f.Post)
        .WithRequired(s => s.ApplicationUser);
    }

在模型生成过程中检测到一个或多个验证错误:

ApplicationUser_Post_Target::多重性在Role中无效关系'ApplicationUser_Post'中的'ApplicationUser_Post_Target'。因为依赖角色属性不是关键属性,所以从属角色的多重性的上界必须是"*"。

怎么了?

实体框架中的1:1关系

你想在用户和帖子之间建立1对1的关系吗?一个用户只能发一个,且只能发一个?

无论如何,在EF(至少6)中,具有相同PK的两个实体之间可以建立1对1的关系,即PK即FK。所以必须将posts的PK设置为字符串。

Posts类的UserId属性添加[Required]属性

默认情况下,字符串属性将是可空的,但由于这是外键,并且您希望关系为Required,您必须将UserId属性设置为非空属性,这可以通过添加[Required]属性来完成。