EF4.1 Code First Complex Type作为主键

hoe*_*etz 11 .net domain-driven-design entity-framework primary-key ef-code-first

我目前正在尝试使用实体框架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; }
    }
Run Code Online (Sandbox Code Playgroud)

现在,当我在配置DbContext时执行此操作时出现异常:

modelBuilder.Entity<Voyage>().HasKey<VoyageNumber>(k => k.VoyageNumber);
Run Code Online (Sandbox Code Playgroud)

属性'VoyageNumber'不能用作实体'Domain.Model.Voyages.Voyage'的关键属性,因为属性类型不是有效的键类型.只有标量类型,字符串和byte []是受支持的键类型.

当我尝试这个时:

modelBuilder.Entity<Voyage>().HasKey<string>(k => k.VoyageNumber.Id);
Run Code Online (Sandbox Code Playgroud)

属性表达式'k => k.VoyageNumber.Id'无效.表达式应该代表一个属性:C#:'t => t.MyProperty'

我是否真的要丢弃我的VoyageNumber并用原始类型替换它?

Lad*_*nka 14

这是限制.关键成员可以只是实体中的标量属性.复杂类型表示为不支持的复杂属性.

  • 这在EF6中仍然如此吗?我在原始问题中记录了相同的错误,所以我假设没有任何改变,但希望添加一些我缺少的配置选项. (5认同)