gpt4 book ai didi

c# - (嵌套)拥有类型的 EF Core 域范围值转换

转载 作者:行者123 更新时间:2023-12-05 02:45:55 26 4
gpt4 key购买 nike

我在 EF Core 中将多个值对象(DDD 范例)设置为自有类型。

EF Core 支持以一种方式配置自有类型,它会通过 Owned() 自动将对给定类型的所有引用视为自有类型。方法。

但是,我似乎找不到一种方法来以类似的集中方式指定它们的配置,尤其是值转换。

    {   // Configure value objects as owned types.
builder.Owned(typeof(Money));
builder.Owned(typeof(Currency));
builder.Owned(typeof(Address));
builder.Owned(typeof(Mass));
builder.Owned(typeof(MassUnit));

// Store and restore mass unit as symbol.
builder.Entity<Product>()
.OwnsOne(p => p.Mass, c => c.Property(m => m.Unit)
.HasConversion(
u => u.Symbol,
s => MassUnit.FromSymbol(s))
.HasMaxLength(3)
);
}

正如您在上面看到的,为 MassUnit 配置了一个值转换, 这是一个嵌套在 Mass 中的值对象.

但我必须在所有使用值对象的地方手动执行此操作。例如,我已经在使用 Money在 3 个不同的地方键入,此类型包含 Currency ,我希望为其配置类似的值转换。

是否有任何(好的)方法来为拥有的类型指定通用的、域范围的配置?

我已经尝试通过 builder.Entity<Mass>().Property(m => m.Unit).HasConversion(..) 配置它们,但如果您尝试通过 Entity<> 配置拥有的类型,EF Core 似乎会抛出异常.

最佳答案

This is possible使用共享的 ValueConverter:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
var converter = new ValueConverter<EquineBeast, string>(
v => v.ToString(),
v => (EquineBeast)Enum.Parse(typeof(EquineBeast), v));

modelBuilder
.Entity<Rider>()
.Property(e => e.Mount)
.HasConversion(converter);
}

关于c# - (嵌套)拥有类型的 EF Core 域范围值转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65727244/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com