【问题标题】:Is it possible to have one Entity Model for two databases in one project?是否可以在一个项目中为两个数据库拥有一个实体模型?
【发布时间】:2014-04-16 08:33:37
【问题描述】:

我正在使用 Entity Framework 开发一个偶尔连接的应用程序。我有一个在线数据库(SQL Server)和一个本地数据库(SQL Server compact 3.5)。我正在使用 Microsoft Sync Framework 将我的一些表从在线数据库同步到离线数据库。我对每个数据库进行了配置。我想做的是使用我从对本地数据库的在线数据库进行的逆向工程中获得的 same 模型。

我将做一个简单的例子来说明我在哪里。这不是我正在处理的数据库。这只是一个例子。

我的在线数据库包含一个表产品。我想偶尔将该数据库与 本地 数据库同步。为此,我使用 Microsoft Sync Framework。没问题,我可以让它工作。所以现在,我的两个数据库包含 same 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。没问题。

如何使用 same Product 类与我的本地数据库(SQL Server Compact 3.5)进行通信?是否可以 ?我想我必须创建另一个上下文,但我不习惯手动创建它。

【问题讨论】:

  • 假设两者具有相同的架构,您可以通过向 onlineDbContext 构造函数提供不同的连接字符串(使用不同的提供者和不同的存储连接字符串)来连接到本地数据库

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


【解决方案1】:

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

【讨论】:

  • 这不是我评论的副本吗?
  • 谢谢,我会检查这些链接并了解有关提供商的信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-20
  • 1970-01-01
  • 2011-12-15
  • 1970-01-01
  • 2015-08-30
  • 1970-01-01
  • 2011-06-13
相关资源
最近更新 更多