如何在实体类中存储数据库名称

时间:2016-11-08 20:08:51

标签: c# entity-framework-6

我想在POCO实体类上创建一个只读属性[NotMapped]Database {get;},以反映在创建时从中加载实体的数据库的名称,以便我可以在以后读取该值。 DbContext实例可用。如何告诉EF在对象创建时加载此数据?

我知道context.Database.Connection.ConnectionString,但这不是我想要做的。我希望在通过DbContext类实例化对象时将属性设置为当前数据库名称。

我已搜索过此问题,但未能在此处找到任何信息,或许我不知道如何说出问题。

2 个答案:

答案 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;}