实体框架——如果属性无效,返回自定义字符串会影响实际数据
本文关键字:字符串 影响 数据 自定义 返回 如果 框架 属性 无效 实体 | 更新日期: 2023-09-27 17:54:43
我想这样做:
private string username { get; set; }
public override string UserName
{
get
{
if( this.username == null )
{
return "anonymous";
}
return this.username;
}
set
{
this.username = value;
}
}
但是当我对实体进行更改并保存它时,数据库会更新为Username = "anonymous"
,我如何使用getter而不影响数据库实体的工作方式?
背景:
ApplicationUser user = this.blah.GetUserByID(blah);// gets user from db
user.UserDeletedAccount = true;
user.Email = null;
user.UserName = null;
user.DeletedAt = now;
user.UpdatedAt = now;
user.PhoneNumber = null;
this.context.SaveChanges();
在此调用之后,除了Username
之外的所有内容都被正确分配。数据库中的Username
现在等于"anonymous"
,实际上应该是NULL
…我只希望当我将用户拉出应用程序并尝试显示用户名时,它只显示"anonymous"
而不是
如果返回匿名的原因是在视图中显示,我认为你是混合了表示层和持久层的概念。
如果是这种情况,我会尝试另一种方法,比如用这种特殊情况创建一个ViewModel of User。另一个选择是在你的模型中做一个hack,添加一个属性,并将其配置为Entity Framework以忽略。
public string UserNameToShow
{
get
{
if( this.username == null )
{
return "anonymous";
}
return this.username;
}
}
您可以通过将存储的内容与显示的内容分开来实现:
public override string UserName { get; set; }
[NotMapped]
public string UserNameDisplay
{
get { return UserName ?? "anonymous"; }
set { UserName = value; }
}