非常基本,但我的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
项目Data
项目问题
我如何强制(或至少警告)开发人员不设置user.Active
?至少,我可以向设置者提供一些编译时警告(类似于[Obsolete]
),以便他们收到通知吗?
谢谢,
答案 0 :(得分:2)
您可以使用好友程序集来解决您的问题并将其公开发布到您想要的项目中,并将其作为其他项目的私有。
[assembly:InternalsVisibleTo("cs_friend_assemblies_2")]