我正在尝试在我正在开发的一个新项目中遵循 DDD,但在配置我的 ValueObject 之一时遇到了问题。
我有以下AggregateRoot
public sealed class Event : TenantOwnedEntity<EventId>
{
... removed for clarity ...
private Event(EventId id,
TenantId tenantId,
EventName name,
EventDescription description,
DateOnly startDate,
DateOnly? endDate,
EventCost cost,
EventAttendiesType attendiesType)
: base(id, tenantId)
{
Name = name;
Description = description;
StartDate = startDate;
EndDate = endDate;
Cost = cost;
AttendeesType = attendiesType;
}
public EventName Name { get; private set; }
public EventDescription Description { get; private set; }
public DateOnly StartDate { get; private set; }
public DateOnly? EndDate { get; private set; }
public EventCost Cost { get; private set; }
public EventAttendiesType AttendeesType { get; private set; }
... removed for clarity ...
}
具有以下配置
internal class EventConfiguration : IEntityTypeConfiguration<Event>
{
public void Configure(EntityTypeBuilder<Event> builder)
{
builder.HasKey(e => e.Id);
builder
.Property(e => e.Id)
.HasConversion
(
id => id.Id,
value => new EventId(value)
);
builder.HasIndex(e => e.TenantId);
builder
.Property(e => e.Name)
.HasConversion
(
name => name.Value,
value => EventName.Create(value).Value
)
.HasColumnType($"varchar({EventName.MAX_LENGTH})")
.HasMaxLength(EventName.MAX_LENGTH);
builder
.Property(e => e.Description)
.HasConversion
(
description => description.Value,
value => EventDescription.Create(value).Value
)
.HasColumnType($"varchar({EventDescription.MAX_LENGTH})")
.HasMaxLength(EventDescription.MAX_LENGTH);
builder
.Property(e => e.Cost)
.HasConversion
(
cost => EventCostToDb(cost),
value => EventCostFromDb(value)
)
.HasColumnType("varchar(50)")
.HasMaxLength(50);
builder
.Property(e => e.AttendeesType)
.HasConversion
(
attendeeType => AttendeeTypeToDb(attendeeType),
value => AttendeeTypeFromDb(value)
)
.HasColumnType("varchar(50)")
.HasMaxLength(50);
}
我遇到的问题是,当我尝试创建迁移 EF core 9 时会抛出以下错误。
无法创建“AppContext”类型的“DbContext”。异常“找不到实体类型“事件”的合适构造函数。以下构造函数的参数无法绑定到实体类型的属性: 无法在“事件(EventId id、TenantIdtenantId、EventName 名称、EventDescription 描述、DateOnly startDate、DateOnly? endDate、EventCost 成本、EventAttendiesType attendiesType)”中绑定“attendiesType” 请注意,只有映射的属性可以绑定到构造函数参数。无法绑定对相关实体的导航,包括对所拥有类型的引用。尝试创建实例时抛出。有关设计时支持的不同模式,请参阅 https://go.microsoft.com/fwlink/?linkid=851728
attendiesType 没有什么特别之处,它是一个基本的 ValueObject,就像 EF Core 并不抱怨的 EventCost 一样。 任何关于这里发生的事情的建议将不胜感激 - 我已经为这个问题绞尽脑汁了几个小时了
关键信息是这样的:
请注意,只有映射属性才能绑定到构造函数参数。
您的构造函数参数定义如下:
attendiesType
。AttendeesType
。
您能找出其中的差异吗?为什么其中一个与另一个不匹配? ^^