6

有没有办法让只读字段没有设置器的属性映射到具有实体框架代码优先的数据库列?

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

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 调用或其他方法来完成?

4

1 回答 1

5

没有办法使实体真正不可变,但您可以使用不可访问的设置器来阻止用户修改它们,这可能就足够了,具体取决于您的情况:

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

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

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

于 2013-05-24T22:22:47.557 回答