.net - EF4.1 Code First 复杂类型作为主键

标签 .net entity-framework domain-driven-design primary-key ef-code-first

我目前正在尝试使用 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);

The property 'VoyageNumber' cannot be used as a key property on the entity 'Domain.Model.Voyages.Voyage' because the property type is not a valid key type. Only scalar types, string and byte[] are supported key types.



当我尝试这个时:
modelBuilder.Entity<Voyage>().HasKey<string>(k => k.VoyageNumber.Id);

The properties expression 'k => k.VoyageNumber.Id' is not valid. The expression should represent a property: C#: 't => t.MyProperty'



我真的必须丢弃我的 VoyageNumber 并用原始类型替换它吗?

最佳答案

这是限制。键成员只能是实体中直接的标量属性。复杂类型表示为不支持的复杂属性。

关于.net - EF4.1 Code First 复杂类型作为主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5522584/

相关文章:

c# - 如何使用 Entity Framework Core 将 SQL 数据从一个表传输到另一个表

entity-framework - Entity Framework 6 : is there a way to iterate through a table without holding each row in memory

c# - SQL 查询 : Select Column1, 行数 (criteria1),行数 (criteria2)

.net - 为什么 ASP.NET 页面在本地主机上比在生产服务器上慢得多

c# - 如何正确制作 byte[] 字段必填字段?

entity-framework - Breeze Expand 无法在带有 EF 的 WebAPI 上工作

c# - 我们可以在领域驱动设计中使用 ASP.NET Identity 吗?

domain-driven-design - 领域驱动设计的缺点?

asp.net-mvc - 存储库模式 - 如何正确处理 JOIN 和复杂查询?

c# - 使用 DateTime.Parse 方法时出现异常