我的密钥属性不是Guid类型,而是带有Guid的自定义引用类型

时间:2015-03-20 14:31:12

标签: c# entity-framework domain-driven-design

我有一个域模型,在此类中说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,但仍然有问题。我该怎么办?

1 个答案:

答案 0 :(得分:0)

您无法在实体中使用Complex Type作为Key。不公平地,这是一个limitation of EF。你的实体的密钥必须是原始类型,并且必须在同一个类中声明它们(它们)。最常见的是,关键成员是intGUID类型,但任何基本类型都可以用作关键属性。