首页 > 解决方案 > 如何在单个字段中存储值对象的集合而不在 EF Core 中创建新表

问题描述

我正在使用 EF Core 作为我的 ORM,并且我正在学习领域驱动设计。

您可能已经知道 DDD 值对象没有标识符,并且为值对象创建单独的表不是好的做法。

但是我想在不创建新表的情况下存储值对象的集合,那么我应该怎么做呢?看下面的例子:

public class User : Entity 
{
      public ICollection<Address> Addresses { get; set; }
}

public class Address : ValueObject 
{
     public string Country { get; set; }
     public string City { get; set; }
     // some other properties
}

标签: c#entity-framework-coredomain-driven-design

解决方案


正如亚历山大所说,我决定使用价值转换(如下所示):

public class UserConfiguration : IEntityTypeConfiguration<User>
{
    public void Configure(EntityTypeBuilder<User> builder)
    {
        builder.Property(user => user.Addresses)
            .HasConversion(
            a => (string)JsonConvert.SerializeObject(a),
            a => JsonConvert.DeserializeObject<List<Address>>(a));
        /*builder.HasData(Data.GetData<User>());*/
    }
}

现在地址集合将存储在单个字段中


推荐阅读