首先,有没有办法通过使用数据注释或流畅的 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);