【问题标题】:How to Save string property with foreign key reference in database如何在数据库中保存带有外键引用的字符串属性
【发布时间】:2015-08-21 20:26:23
【问题描述】:

我正在使用实体框架和 sql 数据库开发一个 asp.net mvc 项目。 在某些操作中,我想保存一条通知消息,其中包含另一个模型用户的引用

两种型号如下

public class NotificationMessage
{      
    [Key]
    public int Id { get; set; }
    public int? FromUserId { get; set; }
    [ForeignKey("FromUserId")]
    public virtual User FromUser { get; set; }
    public string Message { get; set; }

}


public class User 
{      
    [Key]
    public int UserId { get; set; }
    public string UserName { get; set; }
    public string Name{ get; set; }          
}

现在我在我的数据库表中添加一个新的通知消息,消息属性就像

“来自用户的新通知”+FromUser.Name

现在,如果我更改用户名,则此消息不会更改,因为它在数据库中保存为静态消息。 我想要的是这条消息将保存在数据库中,如果我更改用户的名称属性,这条消息将显示更新的用户名称

【问题讨论】:

    标签: c# sql asp.net entity-framework


    【解决方案1】:

    如果您将裸string 持久化到数据库中,即使它是使用来自相关实体的某些数据构造的,它仍将是string。用于构造该字符串的表达式不会在您每次访问它时重新计算(不管 EF,这是自然的string 行为)。

    最好将Message 更改为计算属性:

    public string Message
    {
        get { return "new notification from user" + FromUser.Name; }
    }
    

    【讨论】:

    • 但在这里我不能使用计算属性,因为我的消息将采用各种格式。这里我只展示了一种类型。某些类型甚至没有任何用户名
    • 将该计算逻辑添加到Message getter(而不是在插入时计算它)以返回适当的消息。另外,考虑将其更改为GetMessage() 方法,这样会更清楚确实是计算出来的。
    • 谢谢。我想我现在很清楚了。当为客户端获取它时,我将计算逻辑
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-28
    • 2020-05-04
    相关资源
    最近更新 更多