【发布时间】:2011-04-02 10:23:26
【问题描述】:
我目前正在尝试使用 Entity Framework 4.1 的 RC 及其代码优先方法为我的域对象实现存储库。 现在我有一个域实体“Voyage”,它有一个封装在“VoyageNumber”类型中的唯一标识符
public class VoyageNumber
{
private readonly string number;
public VoyageNumber(string number)
{
Validate.NotNull(number, "VoyageNumber is required");
this.number = number;
}
public string Id
{
get { return number; }
}
现在我在 DbContext 的配置中执行此操作时遇到异常:
modelBuilder.Entity<Voyage>().HasKey<VoyageNumber>(k => k.VoyageNumber);
属性“VoyageNumber”不能 用作实体的关键属性 'Domain.Model.Voyages.Voyage' 因为 属性类型不是有效的键 类型。只有标量类型、字符串和 byte[] 是支持的键类型。
当我尝试这个时:
modelBuilder.Entity<Voyage>().HasKey<string>(k => k.VoyageNumber.Id);
属性表达式'k => k.VoyageNumber.Id' 无效。这 表达式应该代表一个 属性:C#:'t => t.MyProperty'
我真的必须丢弃我的 VoyageNumber 并将其替换为原始类型吗?
【问题讨论】:
-
使用这个时的异常信息是什么:modelBuilder.Entity
().HasKey (k => k.VoyageNumber); -
用异常消息更新了问题。
-
在 EF 6.1.3 中仍然如此
标签: .net entity-framework domain-driven-design primary-key ef-code-first