实体框架——如果属性无效,返回自定义字符串会影响实际数据

本文关键字:字符串 影响 数据 自定义 返回 如果 框架 属性 无效 实体 | 更新日期: 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; }
}