使用Entity Framework Code First存储只读计算字段

Kev*_*evB 11 ef-code-first entity-framework-4.1

我正在使用实体框架代码优先,我有一个实体定义了StartTime属性,EndTime属性和Duration属性(以及其他一些).该Duration属性是计算字段,它是开始和结束时间之间的持续时间(以分钟为单位).我的财产声明如下:

public DateTime StartTime { get; set; }
public DateTime EndTime { get; set; }
public int Duration
{
    get
    {
        return (int)this.EndTime.Subtract(this.StartTime).TotalMinutes;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想在代码中运行这个计算,但是持续时间值会持久保存到数据库以及开始和结束时间值(以便在我根据这些数字运行报告时更容易在线下进行).

我的问题是,如何让这个只读属性映射回来并首先使用代码保存到数据库?

Kev*_*evB 19

受Slauma的回答启发,我能够通过使用受保护的setter来实现我的目标.这会将值保留回数据库,但不允许在其他位置修改该值.

我的房产现在看起来像这样:

public int Duration
{
    get
    {
        return (int)this.EndTime.Subtract(this.StartTime).TotalMinutes;
    }
    protected set {}
}
Run Code Online (Sandbox Code Playgroud)

  • 每次加载此实体时,EF都会更新数据库.我们猜测EF的变更跟踪错误地认为此属性已发生变化.对我们来说,这会导致意外的并发冲突. (4认同)