【问题标题】: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();
    
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多