【问题标题】:C# Unable to track entity of type because primary key property is nullC# 无法跟踪类型的实体,因为主键属性为空
【发布时间】:2021-07-14 08:27:00
【问题描述】:

我有一个 User 表和一个 UserProfileImage 表链接在一起。

这是用户表结构

public class User : IdentityUser
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string MobileNumber { get; set; }
    public override bool LockoutEnabled { get; set; } = true;
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public DateTime? DateOfBirth { get; set; }
    public DateTime CreatedOn { get; set; } = DateTime.Now;
    public DateTime UpdatedOn { get; set; } = DateTime.Now;
    
    public UserProfileImage UserProfileImage { get; } = new UserProfileImage();

}

这是 UserProfileImage 结构

public class UserProfileImage
{
    [Key]
    public string Id { get; set; }
    public string Name { get; set; }
    public string UserId { get; set; }
    public virtual User User { get; set; }
    public string Link { get; set; }
    public string Location { get; set; }
    public DateTime CreatedOn { get; set; } = DateTime.Now;
}

我已将它们链接到 dbcontext 中,如下所示:

modelBuilder.Entity<User>()
    .HasOne(a => a.UserProfileImage)
    .WithOne(b => b.User)
    .HasForeignKey<UserProfileImage>(b => b.UserId)
    .OnDelete(DeleteBehavior.Cascade);

但是,当我尝试添加新用户时,我得到了这个异常:

无法跟踪“UserProfileImage”类型的实体,因为主要 关键属性“Id”为空。

我可以知道这是什么意思吗?我目前没有向 UserProfileImage 添加新条目。

【问题讨论】:

  • I am not adding a new entry to UserProfileImage - 是的,因为您指定了UserProfileImage { get; } = new UserProfileImage();
  • 哦!我没有意识到这一点。我一直以错误的方式设置关系。感谢您的帮助。你能把它作为你的答案,所以我可以把它标记为正确

标签: c# asp.net-core .net-core


【解决方案1】:

尝试修复你的课程:

ublic class User : IdentityUser
{
   ......
    public  string UserProfileImageId  { get; set;}

   [ForeignKey(nameof(UserProfileImageId ))]
    [InverseProperty("User")]
    public virtual UserProfileImage UserProfileImage { get; set;}

}

public class UserProfileImage
{
    [Key]
    public string Id { get; set; }
     ......
    [InverseProperty("UserProfileImage")]
   public virtual User User { get; set;}
}

【讨论】:

    猜你喜欢
    • 2020-03-26
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    • 2022-01-26
    • 2023-01-03
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    相关资源
    最近更新 更多