.net core EF-有条件地允许保存属性值(具有支持字段)

.net core EF-有条件地允许保存属性值(具有支持字段),.net-core,.net-core-2.2,abp,.net Core,.net Core 2.2,Abp,我有一个用户实体和一个具有一对一关系的电子邮件收件人实体。也可以在没有相关用户实体的情况下创建电子邮件收件人 我的电子邮件收件人实体从用户实体获取名称、姓氏和电子邮件地址(如果已附加/包含)。我已经设置了属性,如果备份字段值在返回用户属性之前不为null,则返回备份字段值,因此如果需要,我可以指定一个替代名称 保存电子邮件收件人时,EF查看名称、姓氏和电子邮件地址属性,并使用用户实体中的值填充电子邮件收件人表,而不是使用支持字段值。我希望这些字段在数据库中保持为空,前提是我没有明确设置值,即re

我有一个
用户
实体和一个具有一对一关系的
电子邮件收件人
实体。也可以在没有相关用户实体的情况下创建电子邮件收件人

我的
电子邮件收件人
实体从
用户
实体获取
名称
姓氏
电子邮件地址
(如果已附加/包含)。我已经设置了属性,如果备份字段值在返回用户属性之前不为null,则返回备份字段值,因此如果需要,我可以指定一个替代名称

保存
电子邮件收件人
时,EF查看
名称
姓氏
电子邮件地址
属性,并使用
用户
实体中的值填充
电子邮件收件人
表,而不是使用支持字段值。我希望这些字段在数据库中保持为空,前提是我没有明确设置值,即
recipient.Name=“new Name”

我的问题:如何使EF基于支持字段值而不是属性值填充选定的数据库字段?还是有完全不同的方法来解决这个问题

电子邮件收件人实体:

公共类电子邮件收件人
{
私有字符串\u名称;
公共虚拟字符串名
{ 
获取{return User==null?\u name:\u name??User.name;}
设置{u name=value;}
}
私人字符串(姓氏),;
公共虚拟字符串姓氏
{
获取{return User==null?\u姓氏:\u姓氏??用户。姓氏;}
集合{u姓氏=值;}
}
私有字符串\u电子邮件地址;
公共虚拟字符串电子邮件地址
{
获取{return User==null?\u emailAddress:\u emailAddress??User.emailAddress;}
设置{u emailAddress=value;}
}
[Key,ForeignKey(nameof(UserId))]
公共用户用户{get;protected set;}
public long?UserId{get;set;}
}

经过进一步挖掘,我想我找到了解决办法。仔细阅读Microsoft的文档,我们似乎可以明确地要求EF读取和写入备份字段,而不是使用属性

模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
modelBuilder.Entity().Property(x=>x.Name)
.UsePropertyAccessMode(PropertyAccessMode.Field);
}
在设置新的
名称之前,支持字段保持为
null
,即
recipient.Name=“new Name”
因此,我可以使用
recipient.Name
属性返回
收件人。_Name
(存储在数据库中)或者如果它为空,则返回
recipient.User.Name