C# 实体框架可以设置的只读属性
非常基本,但我的谷歌fu让我失望 我有一个域对象,比如User,我希望活动属性是只读的。但是,当从数据库加载时,需要通过EF(6)设置属性 表:C# 实体框架可以设置的只读属性,c#,entity-framework,C#,Entity Framework,非常基本,但我的谷歌fu让我失望 我有一个域对象,比如User,我希望活动属性是只读的。但是,当从数据库加载时,需要通过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; }
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
,以便实例化对象
架构(如果重要):
- 用户类存在于
项目中域
- EF6类配置通过
project完成Data
- EF6使用Fluent API配置(将ORM内容排除在我的域项目之外)
- EF6不使用DTO,但直接配置域类
user.Active
?至少,我可以向setter提供一些编译时警告(类似于[过时]
),以便他们得到通知吗
谢谢,您可以使用好友程序集来解决您的问题,并将其公开给您想要的项目,并将其公开给其他项目
[assembly:InternalsVisibleTo("cs_friend_assemblies_2")]
我很高兴能帮上忙:)