我有一个域模型,在此类中说Contract
我有Id
属性,但这不是简单的Guid
类型,而是ContractId
类型。
public class Contract
{
public ContractId Id {get; set; }
}
和我的代码中的其他地方:
public class ContractId
{
public Guid Id { get; set; }
public ContractId(){}
public ContractId(Guid id){ Id=id; }
}
现在在我的DbContext中,我需要说明属性是我的关键属性。
modelBuilder.Entity<Contract>()
.HasKey(k => k.Id)
.ToTable("Contract", "Catalog");
虽然我没有编译时间错误,但这会在运行时生气,因为我不能将ContractId
用作Key属性。我已经考虑指定HasKey(k => k.Id.Id)
,因为这是一个有效的Guid,但仍然有问题。我该怎么办?
答案 0 :(得分:0)
您无法在实体中使用Complex Type作为Key
。不公平地,这是一个limitation of EF。你的实体的密钥必须是原始类型,并且必须在同一个类中声明它们(它们)。最常见的是,关键成员是int
或GUID
类型,但任何基本类型都可以用作关键属性。