我已经使用app.config
通过声明性方法成功地将实体框架代码优先数据模型与现有的Sql Server Compact数据库进行了映射,但如果我能以编程方式构建此类连接将会很棒可能是EntityConnectionStringBuilder
(System.Data.EntityClient)类的帮助。不幸的是,这种方法不起作用,因为[DbContext].Connection.ConnectionString
不接受其大部分属性。
这是有错误的实际工作代码注释掉的:
Book.cs
public class Book
{
[Key]
public string Isbn { get; set; }
public string Title { get; set; }
public string Author { get; set; }
public string Publisher { get; set; }
public DateTime Published { get; set; }
public int Pages { get; set; }
public bool InStock { get; set; }
public string Description { get; set; }
}
Catalog.cs
public class Catalog : DbContext
{
public DbSet<Book> Books { get; set; }
}
的app.config
<?xml version="1.0"?>
<configuration>
<connectionStrings>
<add
name="Catalog"
providerName="System.Data.SqlServerCE.4.0"
connectionString="Data Source=res/Catalog.sdf"
/>
</connectionStrings>
</configuration>
主要()
static void Main()
{
// var res = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "res");
// var str = new EntityConnectionStringBuilder();
// str.Name = "Catalog";
// str.Provider = "System.Data.SqlServerCe.4.0";
// str.ProviderConnectionString = String.Format("Data Source {0}", Path.Combine(res, "Catalog.sdf"));
try
{
using (var catalog = new Catalog())
{
// catalog.Database.Connection.ConnectionString = str.ConnectionString;
// remaining code not relevant - skipped
我尝试过使用其他构建器类,例如SqlCeConnectionStringBuilder
(System.Data.SqlServerCe),SqlConnectionStringBuilder
(System.Data.SqlClient)甚至DbConnectionStringBuilder
(System.Data)。常见的但显然没有一个似乎与[DbContext].Connection.ConnectionString
所期望的相匹配。
我是否应该总结出没有程序化方法来实现这一目标? 任何建议一定会受到赞赏。非常感谢您的贡献。
答案 0 :(得分:2)
如果您首先使用SQL Server Compact 4.0和DbContext
代码,则不能使用EntityConnectionStringBuilder
- 它会为EF和EDMX文件构建连接字符串。从SqlCeConnectionStringBuilder
程序集版本4.0.0.0开始,您需要System.Data.SqlServerCe
!
您还应该通过构造函数将连接字符串传递给上下文实例 - DbContext
具有接受连接字符串名称(来自配置)或连接字符串本身的构造函数。
答案 1 :(得分:2)
打开DbConnection并将其传递给DbContext构造函数或使用DefaultConnectionFactory:
Database.DefaultConnectionFactory
= new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0");
using (var catalog = new Catalog("Catalog.sdf"))
{
}
SqlCeConnectionFactory是Microsoft提供的即用型连接工厂,但您也可以实现自己的工厂。