是否可以在一个项目中为两个数据库设置一个实体模型?

时间:2014-04-16 08:33:37

标签: c# sql sql-server database entity-framework

我正在使用实体框架处理偶尔连接的应用程序。我有一个在线数据库( SQL Server )和一个本地数据库( SQL Server compact 3.5 )。我正在使用 Microsoft Sync Framework 将我的一些表从在线数据库同步到脱机数据库。我在每个数据库上进行了配置。我想要做的是使用我在我的在线数据库上为本地数据库进行的逆向工程得到的相同模型。

我将举一个简单的例子来说明我的位置。它不是我正在处理的数据库。这只是一个例子。

我的在线数据库包含一个表Product。我想偶尔将该数据库与本地数据库同步。为此,我使用Microsoft Sync Framework。没问题,我可以让它有效。所以现在,我有两个包含相同 Product表的数据库(加上一些同步表......)。

在我的WPF项目中,我使用在线数据库上的逆向工程来获取模型。所以在我的项目中,我现在有了Product类和onlineDB上下文。

public partial class Product
{
    public int id { get; set; }
    public string name { get; set; }
}

public class ProductMap : EntityTypeConfiguration<Product>
{
    public ProductMap()
    {
        // Primary Key
        this.HasKey(t => t.id);
        // Properties
        this.Property(t => t.id)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
        this.Property(t => t.name)
            .IsFixedLength()
            .HasMaxLength(10);
        // Table & Column Mappings
        this.ToTable("Products");
        this.Property(t => t.id).HasColumnName("id");
        this.Property(t => t.name).HasColumnName("name");
    }
}


public partial class onlineDBContext : DbContext
{
    static onlineDBContext()
    {
        Database.SetInitializer<onlineDBContext>(null);
    }
    public onlineDBContext()
        : base("Name=onlineDBContext")
    {
    }
    public DbSet<Product> Products { get; set; }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new ProductMap());
    }
}

有了这个,我可以正确地更新,删除,插入......数据到我的 onlineDatabase 。没问题。

如何使用相同产品类与本地数据库(SQL Server Compact 3.5 )进行通信?可能吗 ?我想我必须创建另一个上下文,但我不能用它手动创建它。

1 个答案:

答案 0 :(得分:1)

正如您在代码中看到的那样,DbContext的构造函数正在将nameOfConnectionString传递给基类。在您的情况下,此字符串为onlineDBContext,这意味着您在.config文件中具有该名称的连接字符串。 您可以更改连接字符串以连接到不同的源。详细了解如何执行此操作herehere