C# 实体框架-如果属性为null,返回的自定义字符串将影响实际数据
我想这样做:C# 实体框架-如果属性为null,返回的自定义字符串将影响实际数据,c#,entity-framework,C#,Entity Framework,我想这样做: private string username { get; set; } public override string UserName { get { if( this.username == null ) { return "anonymous"; } return this.username
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而不影响db实体的工作方式
背景:
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();
在该调用之后,除了
用户名
之外的所有内容都被正确分配给了<数据库中的code>Username现在等于“匿名”
,实际上应该是NULL
。。。我只希望这样,当我将用户拉到我的应用程序中并尝试显示用户名时,它只显示“匿名”
,而不是如果返回匿名的原因是要在视图中显示,我认为您将表示层的概念与持久层的概念混为一谈
如果是这种情况,我会尝试另一种方法,比如用这种特殊情况创建用户的ViewModel。另一种选择是在模型中添加属性并将其配置到实体框架以忽略
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; }
}
你必须提供更多的细节。你到底在做什么?你不能在实体文件中这样做。。它与数据库的映射类。它将自动保存已填充的属性I更新我的OP:您有推荐的解决方案吗?您的代码明确告诉EF使用“匿名”。很明显,到时候它会这样做的。使用两个不同的类:一个用于EF,一个用于演示。当然,使用两个类,如视图模型…该死,我需要更改的代码太多了。啊!