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,一个用于演示。当然,使用两个类,如视图模型…该死,我需要更改的代码太多了。啊!