我想在POCO实体类上创建一个只读属性[NotMapped]Database {get;}
,以反映在创建时从中加载实体的数据库的名称,以便我可以在以后读取该值。 DbContext
实例可用。如何告诉EF在对象创建时加载此数据?
我知道context.Database.Connection.ConnectionString
,但这不是我想要做的。我希望在通过DbContext
类实例化对象时将属性设置为当前数据库名称。
我已搜索过此问题,但未能在此处找到任何信息,或许我不知道如何说出问题。
答案 0 :(得分:2)
你可以这样做。首先创建一些界面:
public interface IHasDatabaseName {
string Database { set; }
}
并为有问题的实体实施。然后在DbContext
的构造函数中(或在构建DbContext
的任何位置,如果您使用DI容器),请订阅ObjectMaterialized
事件:
// this is DbContext here
((IObjectContextAdapter) this).ObjectContext.ObjectMaterialized += ObjectContextOnObjectMaterialized;
然后:
// this is DbContext here
private void ObjectContextOnObjectMaterialized(object sender, ObjectMaterializedEventArgs objectMaterializedEventArgs) {
var dbName = objectMaterializedEventArgs.Entity as IHasDatabaseName;
if (dbName != null) {
dbName.Database = this.Database.Connection.Database;
}
}
答案 1 :(得分:0)
我认为你需要在表上创建一个计算列来获取该信息。类似的东西:
alter table YourTable add [Database] AS DB_NAME();
然后将您的POCO属性定义为Database {get;}
。