EF 4 - 相同的背景,不同的商店?

时间:2011-02-14 11:10:21

标签: .net asp.net architecture entity-framework-4 sql-server-ce

我们有一个.net解决方案,它运行在不同的视图上(WinForms,asp.net) 作为数据访问层,我们使用实体框架4。 作为后端db,我们使用sql server和sqlCe Sqlce用于存储胖客户端的原始数据库副本。

通过这个星座来到我的问题:

是否可以对两个不同的数据存储使用相同的ObjectContext? (sql server和sqlce中的相同db)
或者使用POCO或不同的架构是否更好?

由于

2 个答案:

答案 0 :(得分:1)

如果本地数据库(SQL CE)与大数据库(SQL Server)具有完全相同的结构,则可以通过将不同的连接字符串传递给ObjectContext构造函数来使用相同的映射。实体/ POCO将是相同的。

如果您的本地数据库没有相同的结构,则需要两个映射集(EDMX),您可能需要两个不同的上下文(除非您直接使用ObjectContext)。如果您的本地映射使用与服务器映射相同的实体,则可以将它们映射到相同的POCO类。

答案 1 :(得分:1)

好的,对我来说很好。

1.替换ssdl文件。如本文所述:Preparing an Entity Framework model for multi provider support

2.将* .ssdl文件的构建操作设置为嵌入式资源。

3.Changed my connectionstring

    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();

    }