【问题标题】:EF 4 - same context, different store?EF 4 - 相同的上下文,不同的商店?
【发布时间】:2011-02-15 21:20:07
【问题描述】:
我们有一个在不同视图(WinForms、asp.net)上运行的 .net 解决方案。
作为数据访问层,我们使用实体框架 4。
作为后端数据库,我们使用 sql server 和 sqlCe。
Sqlce用于为胖客户端存储一份原始db的副本。
所以通过这个星座,我的问题出现了:
是否可以为两个不同的数据存储使用相同的 ObjectContext?
(sql server 和 sqlce 中的同一个数据库)
还是使用 POCO 或其他架构更好?
谢谢
【问题讨论】:
标签:
.net
asp.net
architecture
entity-framework-4
sql-server-ce
【解决方案1】:
如果您的本地数据库 (SQL CE) 与大型数据库 (SQL Server) 具有完全相同的结构,您可以通过将不同的连接字符串传递给 ObjectContext 构造函数来使用相同的映射。实体/POCO 将是相同的。
如果您的本地数据库没有相同的结构,您需要两个映射集 (EDMX),并且您可能需要两个不同的上下文(除非您直接使用 ObjectContext)。如果您的本地映射使用与服务器映射相同的实体,您将能够将它们映射到相同的 POCO 类。
【解决方案2】:
好的,对我来说工作得很好。
1.替换了ssdl文件。如本文所述:Preparing an Entity Framework model for multi provider support
2.将*.ssdl文件的构建动作设置为嵌入式资源。
3.更改了我的连接字符串
public static String GetEntityConnectionString()
{
string csdl = "Test";
string ssdl = "Namespace.NewSsdl.ssdl"; //multi provider support (.ssdl embedded in ressource)
string msl = "Test";
EntityConnectionStringBuilder builder = new EntityConnectionStringBuilder();
//Provider
builder.Provider = "System.Data.SqlClient";
builder.ProviderConnectionString = GetProviderConnectionStringPL();
//Metadata
builder.Metadata = string.Format("res://*/{0}.csdl|res://*/{1}|res://*/{2}.msl", csdl, ssdl, msl);
return builder.ToString();
}