EF Core 9配置值对象HasConversion时构造函数参数绑定失败问题求助
EF Core 9配置值对象HasConversion时构造函数参数绑定失败问题求助
嘿,我一眼就瞅到问题所在啦!这大概率是拼写不一致导致的EF Core构造函数参数绑定失败,咱们来掰扯清楚:
先看你的代码细节:
你的Event实体构造函数里有个参数:
private Event(..., EventAttendiesType attendiesType)
而实体对应的属性却是:
public EventAttendiesType AttendeesType { get; private set; }
注意到没?构造函数参数名是attendiesType(单词是attendies),但属性名是AttendeesType(单词是Attendees——多了一个e)!
EF Core在绑定构造函数参数到实体属性的时候,是靠名称匹配来关联的(默认会对应驼峰参数名和帕斯卡属性名,比如参数cost对应属性Cost),但这里attendiesType和AttendeesType的核心单词拼写不一样(attendies vs attendees),EF Core找不到和参数attendiesType对应的属性,所以直接抛出了绑定失败的错误。
反观其他值对象比如EventCost就没问题,因为它们的构造函数参数名(cost)和属性名(Cost)只是大小写不同,拼写完全一致,EF Core能轻松识别匹配。
解决办法
只需要统一拼写就行,给你两个选择:
- 快速修正:改构造函数参数名
把构造函数里的attendiesType改成attendeesType,和属性名AttendeesType的驼峰形式对应上,同时赋值语句也要同步修改:
private Event(EventId id, TenantId tenantId, EventName name, EventDescription description, DateOnly startDate, DateOnly? endDate, EventCost cost, EventAttendiesType attendeesType) // 这里改成attendeesType : base(id, tenantId) { // ...其他赋值... AttendeesType = attendeesType; // 这里也要对应改 }
- 更推荐的彻底修正:统一整个类型的拼写
其实你的值对象类型名EventAttendiesType本身拼写就不对(正确的“参加者”英文是Attendees),建议把类型名改成EventAttendeesType,然后同步修正构造函数参数名和属性名,彻底统一拼写,避免后续再踩类似的坑:
- 重命名值对象类型为
EventAttendeesType - 构造函数参数改成
EventAttendeesType attendeesType - 实体属性保持
public EventAttendeesType AttendeesType { get; private set; }
另外,你的EventConfiguration里关于AttendeesType的转换配置是正确的,只要参数和属性名匹配上,EF Core就能正确识别这个值对象的映射规则了。
备注:内容来源于stack exchange,提问作者CoderK
相关产品推荐
相关产品推荐

