Entity Framework Core是否支持复合类型?

时间:2018-07-10 12:27:59

标签: c# entity-framework-core

我正在将一个较旧的Entity Framework应用程序移植到EF Core。在旧的应用程序中,大量使用了审计信息:

public class Audit
{
    public string CreatedBy { get; set; }
    public DateTime? CreatedDt { get; set; }
    public string ModifiedBy { get; set; }
    public DateTime? ModifiedDt { get; set; }
}

此类嵌入在DbContext的许多实体中,如下所示:

public class Order
{
    public decimal quantity { get; set; }
    public Guid SecurityId { get; set; }
    public decimal price { get; set; }
    public Audit Audit { get; set; }
}

Old EF对此嵌入式类的使用没有问题,但是Entity Framework Core不喜欢它。这迫使我为嵌入式类Audit创建索引。

System.InvalidOperationException: 'The entity type 'Audit' requires a primary key to be defined.'

关于新EF是否支持该功能的任何想法,如果可以,如何解决密钥要求?

1 个答案:

答案 0 :(得分:2)

我相信您正在寻找“拥有的实体类型”

文档:https://docs.microsoft.com/en-us/ef/core/modeling/owned-entities

public class StreetAddress
{
    public string Street { get; set; }
    public string City { get; set; }
}

public class Order
{
    public int Id { get; set; }
    public StreetAddress ShippingAddress { get; set; }
}

// OnModelCreating
modelBuilder.Entity<Order>().OwnsOne(p => p.ShippingAddress);

免责声明:我是项目Entity Framework Classic

的所有者

另一种轻松移植应用程序的方法是使用EF Classic。这是EF6前叉,也支持.NET Core

相关问题