好的,现在我放弃。我的挑战是使用实体框架6,存储库模式和N层解决方案体系结构构建通用DAL。
简介: 使用这种方法https://blog.magnusmontin.net/2013/05/30/generic-dal-using-entity-framework,我创建了DAL和BLL。 一切顺利,Unittests顺利完成。很好。
挑战: 然后,我创建了一个表示层,其中包括一个 Excel插件。但是,由于所使用的数据库可能与每个客户端不同,因此需要从客户端更改数据库ConnectionString。 好的,将应用程序配置添加到Excel模板项目中……不起作用。无论我做什么,我都不会从数据库获得任何数据。
现在,我需要删除app.config,而在初始化BL时只需从客户端提供ConnectionString。
我尝试了Entity Framework - Database First without config的建议 和How can l use Entity Framework without App.config,但我似乎无法完全适应我的挑战。我确实使用了其中提到的一些解决方案,但是由于我的DAL使用的是“存储库模式”,因此我无法完全限制如何实现所提到的解决方案...
我做了什么: 我在DataAccessLayer中添加了一个DbConfiguration类,该类实现了多个构造函数。 (我不知道怎么打其他构造函数-仅参数构造函数,但这是另一个问题。) 我的ythis类构造函数如下:
private DefaultConfiguration()
{
SqlConnectionStringBuilder sqlBuilder = new SqlConnectionStringBuilder()
{
DataSource = database,
InitialCatalog = initialCatalog,
UserID = userId,
Password = password,
IntegratedSecurity = useTrustedConnection
};
// Initialize the EntityConnectionStringBuilder.
EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder()
{
Provider = providerName,
// Set the provider-specific connection string.
ProviderConnectionString = sqlBuilder.ToString(),
// Set the Metadata location.
Metadata = @"res://*/CommonModel.csdl|res://*/CommonModel.ssdl|res://*/CommonModel.msl"
};
SetExecutionStrategy("System.Data.SqlClient", () => new DefaultExecutionStrategy(), database);
}
EntityConnection entityCon = new EntityConnection(entityBuilder.ToString());
//SetDefaultConnectionFactory(new SqlConnectionFactory(entityCon.ConnectionString));
//SetDefaultConnectionFactory(new SqlConnectionFactory(sqlBuilder.ToString()));
我似乎无法弄清楚如何在DbConfiguration的初始化中使用EntityConnection对象。最后两行代码似乎都无法正常工作。
在我的DbContext中,我从
更改了构造方法。public CommonEntities()
: base("name=CommonEntities")
{
this.Configuration.LazyLoadingEnabled = false;
this.Configuration.ProxyCreationEnabled = false;
}
到
public CommonEntities(string ConnectionString)
: base(ConnectionString)
{
this.Configuration.LazyLoadingEnabled = false;
this.Configuration.ProxyCreationEnabled = false;
}
但是,这只会带来可怕的UnIntentionalCodeFirstException,而我现在陷入困境。
问题:
如何从PL一直到DAL获得ConnectionString?我会尝试创建一个非参数的Repository-constructor,它将接受SQL-sonnectionstring作为参数,但是如何?
我知道这是一个很大的问题,但是我试图提供尽可能多的信息而不会引起SystemOutOfMemoryException,并且试图将我的问题归结为一个问题-稍后还会出现更多问题,但是现在这必须满足...
希望你们中的一些神童能给我一两个指针……
答案 0 :(得分:0)
好的,我从来没有像我想要的那样工作过,所以我将DomainModel更改为不使用EDMX文件-这是导致我最终错误的全部原因...
基本上,我已经将EF建模从数据库优先更改为代码优先。...
我还将EntityFramework软件包添加到了我的Excel-Addin项目中。