只读字段或属性

Jos*_*osh 6 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
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Jer*_*odd 5

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

public string Address1 // Public Property without a Setter
{
  get { return _address1; }
  internal set { _address1 = value; }
}
Run Code Online (Sandbox Code Playgroud)

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

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