我正在开发一个应用程序,它将在多个数据库中使用相同的数据库模式.出于这个原因,我创建了一个名为的数据库MyTemplate.创建新用户时,他们将拥有自己的数据库实例.因此,MyTemplate_[UserName]将创建一个名为like的数据库.当用户登录时,我需要将他们的查询指向他们的数据库.出于这个原因,我知道我需要在运行时设置连接字符串.我的问题是,我也想使用实体框架.
目前,我使用MyTemplate作为源创建了一个新的.edmx.我以为我能够更新代码并在那里设置连接字符串.不幸的是,我无法弄清楚如何设置它.TemplateEntities的构造函数没有允许我传入连接字符串的重载.我注意到TemplateEntities派生自DbContext,我不认为这会是问题所在.
string connectionString = GetUsersConnectionString();
using (TemplateEntities entities = new TemplateEntities())
{
TemplateEntity entity = new TemplateEntity();
// Save to the database
entities.TemplateEntity.Add(entity);
entities.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
我创建.edmx错了吗?或者我完全错过了什么?我谷歌的所有内容都显示了一个重载,应该允许传入连接字符串.但是,我没有可用的超载.
有一件事让我现在发疯了.
我的(数据库优先)EF模型需要动态连接字符串(服务器的IP地址可能偶尔会改变).
因此,在较旧的EF版本中,您可以通过构造函数传递连接字符串,但这在5.0中是不可能的.
到目前为止我读到的内容,您可以更改数据模板,但每次重新生成模型等时都会被覆盖,因此不是最好的方法.
另一件事是SQLConnectionFactory,但似乎根本不起作用似乎
(Database.DefaultConnectionFactory = new SqlConnectionFactory( ... )完全被忽略了).
什么是正确的方法呢?
我在我的Windows应用程序中使用了SQL Server CE 4.0,并使用Entity Framework创建了它的模型.
它工作正常但我的问题是它没有构造函数来更改连接字符串,默认情况下它从app.config文件中读取连接字符串.
using (var Context = new MyEntitiesModel(//has no constructor))
{
...
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个动态连接字符串和
using (var Context = new MyEntitiesModel())
{
Context.Database.Connection.ConnectionString = entityConnection.ConnectionString;
}
Run Code Online (Sandbox Code Playgroud)
它通过这种方式工作正常,但如果我删除app.config文件中的另一个连接字符串,它给了我这个.
错误=无效的元数据....
因为默认构造函数使用它
我该怎么处理?
我正在开发一个类库,用于处理使用EF的现有数据库.我想避免类库(和.exe或网站)的使用者在*.config文件中包含实体连接字符串.我希望连接字符串设置为运行时.
如何使用Database First方法设置连接字符串?没有构造函数重载接受连接字符串,当我创建一个(在一个单独的分部类中)时,我得到了"UnintentionalCodeFirstException".
我已经审查过以下链接: