只读字段或属性

时间:2013-05-24 22:10:13

标签: c# entity-framework ef-code-first entity-framework-5

有没有办法让只读字段没有setter的属性映射到具有Entity Framework Code First的数据库列?

我发现两者都被忽略了,例如:

using System;

namespace App.Model
{
    public class Person
    {
        string _address1; // Private Field to back the Address Property

        public string Address1 // Public Property without a Setter
        {
            get { return _address1; }
        }


         public readonly string Address2; // Public Read Only Field
    }
}

是否有Fluent API调用或其他方法来完成?

1 个答案:

答案 0 :(得分:5)

没有办法让实体真正不可变,但你可以使用一个无法访问的setter来阻止用户修改它们,这可能已经足够好了,具体取决于你的情况:

public string Address1 // Public Property without a Setter
{
  get { return _address1; }
  internal set { _address1 = value; }
}

实体框架仍然可以设置值,因此它将正确加载,但一旦创建,该属性将或多或少地固定。

(我建议使用internal而不是private setter,这样您仍然可以在上下文或配置类中使用Fluent API进行映射,前提是它们位于同一个程序集中,或朋友大会。)