实体框架 4.1 中具有不同名称的唯一列和导航属性的流畅映射/数据注释



首先,有没有办法通过使用数据注释或流畅的 API 告诉 EF 4.1 列必须是唯一的?

其次,关于导航属性,我有 2 类文档和用户。在文档类中,我有一个用于所有者 ID (UserId) 的属性和一个用于所有者(用户)的属性。如何告诉 EF 4.1 所有者 ID 实际上是用户 ID,所有者是返回用户的导航属性?

文档类:

public abstract class Document: BaseEntity
    {
        public bool IsActive { get; set; }
        public string Description { get; set; }
        //The UserId
        public Guid OwnerId { get; set; }
        //The User
        public User Owner { get; set; }
    }

实体框架根本不支持唯一键,因此第一个问题的答案是否定的。

OwnerId应被识别为外键,以便自动Owner,除非您映射到外键命名不同的现有数据库。在这种情况下,您可以使用例如:

public abstract class Document: BaseEntity
{
    public bool IsActive { get; set; }
    public string Description { get; set; }
    [Column("UserId"), ForeignKey("Owner")]
    public Guid OwnerId { get; set; }
    public User Owner { get; set; }
}

可能不需要外键数据批注,但可以使用它来将 FK 属性与导航属性显式配对。

在流畅映射中,您可以使用:

modelBuilder.Entity<Document>()
            .Property(d => d.OwnerId)
            .HasColumnName("UserId");
modelBuilder.Entity<Document>()
            .HasRequired(d => d.Owner)
            .WithMany(...)
            .HasForeignKey(d => d.OwnerId);

相关内容

  • 没有找到相关文章

最新更新