实体框架可以设置的只读属性
本文关键字:只读属性 设置 框架 实体 | 更新日期: 2023-09-27 18:16:23
非常基本,但是我的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
?至少,我可以向setter提供一些编译时警告(类似于[Obsolete]
),以便它们得到通知吗?
谢谢,
您可以使用友元程序集来解决您的问题,并将其设置为您想要的项目的公共,并将其设置为其他项目的私有。
[assembly:InternalsVisibleTo("cs_friend_assemblies_2")]