EF核心使用Includent,但外国键并不是另一个表上的主要密钥



我试图将我的桌子与另一端的exourthkey and primaly关联。但是现在,我将使用一个不是上述表格的外国钥匙。我正在使用 [inverseProperty] ,但是我认为它已经有一个错误,因为我已经四处寻找数小时,并且所有人都说了同样的事情。

文档表:

public class Document
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int DocumentId { get; set; }
    public int ProjectId { get; set; }
    public int DepartmentId { get; set; }
    public int AuthorId { get; set; }
    [NotMapped]
    public virtual User Author { get; set; }
}

用户

public class User
{
    [Key]
    public int UserId { get; set; }
    public int AuthUserId { get; set; }
    public string DisplayName { get; set; }
    [NotMapped]
    [ForeignKey("AuthorId")]
    public virtual Document Document { get; set; }
}

上下文:

modelBuilder.Entity<User>(entity =>
        {
            entity.HasOne(u => u.Document)
            .WithMany("AuthorId");
        });

我试图在这里使用解决方案,但没有运气。

任何帮助都将不胜感激。谢谢!

,但现在我将使用并非该表的主要外国钥匙。

为此,您可以使用EF Core备用密钥功能。但是首先更正您的模型类设置如下:(正如您所说的User将具有多个Document

public class Document
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int DocumentId { get; set; }
    public int ProjectId { get; set; }
    public int DepartmentId { get; set; }
    public int AuthorId { get; set; }
    public User Author { get; set; }
}
public class User
{
    [Key]
    public int UserId { get; set; }
    public int AuthUserId { get; set; }
    public string DisplayName { get; set; }

    public ICollection<Document> Documents { get; set; }
}

然后在Fluent API配置中如下:

modelBuilder.Entity<Document>()
        .HasOne(p => p.Author)
        .WithMany(b => b.Documents)
        .HasForeignKey(p => p.AuthorId)
        .HasPrincipalKey(b => b.AuthUserId); // <-- here you are specifying `AuthUserId` as `PrincipalKey` in the relation which is not primary key

相关内容

  • 没有找到相关文章

最新更新