ReadOnly实体框架可以设置的属性

时间:2016-11-05 16:16:00

标签: c# entity-framework

非常基本,但我的Google-fu让我失望。

我有一个域对象,比如User,我想要只读取Active属性。然而,当从数据库加载时,需要通过EF(6)设置属性。

表:

CREATE TABLE Users (
    ID INT NOT NULL PRIMARY KEY CLUSTERED,
    Active BIT NOT NULL DEFAULT 1
    -- other stuff
);

类别:

public class User
{
    public int ID { get; set; }
    public bool Active { get; set; }    // this should be RO

    public void Activate() {
        Active = true;
        this.AddChangelog(ChangeType.Activation, "Activated");
    }

    public void Deactivate() {
        Active = false;
        this.AddChangelog(ChangeType.Activation, "Deactivated");
    }

    // changelogging, etc.
}

开发人员不应直接更改Active,而应使用Activate()Deactivate()方法。但是,EF6需要直接设置Active,以便它可以实例化对象。

架构(如果重要):

  • 用户类存在于Domain项目
  • EF6课程配置通过Data项目
  • 完成
  • EF6使用Fluent API配置(将ORM内容保留在我的域项目中)
  • EF6不使用DTO但直接配置域类

问题

我如何强制(或至少警告)开发人员不设置user.Active?至少,我可以向设置者提供一些编译时警告(类似于[Obsolete]),以便他们收到通知吗?

谢谢,

1 个答案:

答案 0 :(得分:2)

您可以使用好友程序集来解决您的问题并将其公开发布到您想要的项目中,并将其作为其他项目的私有。

[assembly:InternalsVisibleTo("cs_friend_assemblies_2")]