代码之家  ›  专栏  ›  技术社区  ›  Quark Soup

实体框架核心是否支持复合类型?

  •  0
  • Quark Soup  · 技术社区  · 6 年前

    我正在将旧的实体框架应用程序移植到EF核心。在旧的应用程序中,可以自由地使用审计信息:

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

    此类嵌入在dbContext中的许多Entities中,如下所示:

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

    旧的ef对于嵌入类的使用没有问题,但是实体框架核心不喜欢它。它迫使我为嵌入式类审计创建一个索引。

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

    对于新的EF是否支持这一点有什么想法吗?如果支持,如何绕过对密钥的要求?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Jonathan Magnan    6 年前

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

    Docs: 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核心