-1

我试图找出解决这个问题的最佳方法是什么。我在两个不同的数据库中有一个 Customer 表(我知道这并不理想,但它不能被修改,我必须使用我得到的东西)。记录保持同步并共享多个字段(例如 CustomerId、CustomerName 等)。但他们也都有自己独特的领域......例如:

数据库1 客户

  • 客户ID
  • 顾客姓名
  • 字段1
  • 字段2

Database2 客户

  • 客户ID
  • 顾客姓名
  • 不同场1
  • 不同字段2

每个数据库都有自己的 dbContext,我可以独立地从中提取每个 Customer 对象。但我真正想要的是一个统一的客户对象,其中包括两个数据库中所有字段的联合。

完成此操作以便我可以公开单个统一对象的最佳方法是什么?

编辑:我正在使用 DbSet 并为我的上下文对象中的每个实体指定一个映射,如下所示:

public DbSet<Customer> Customers { get; set; }

然后我的映射类具有典型的映射信息:

this.ToTable("Customer");
this.HasKey(t => t.CustomerId);
this.Property(t => t.CustomerName);

等等,所以我正在寻找一种方法来使用多个表/数据库扩展这个逻辑,并且不仅能够执行查询,而且能够执行所有必要的 CRUD 操作

谢谢

4

3 回答 3

4

您需要做的就是声明一个代表统一对象的类:

public class UnifiedCustomer
{
    public int CustomerId {get; set;}
    public string Name {get; set;}
    public int Field1 {get; set;}
    public int Field2 {get; set;}
    public int DifferentField1 {get; set;}
    public int DifferentField2 {get; set;}
}

此类型将用于表示来自两个数据库的数据:

var customers1 = dataContext1.Customers.Select(c => new UnifiedCustomer
{
    CustomerId = c.CustomerId,
    Name = c.CustomerName,
    Field1 = c.Field1,
    Field2 = c.Field2
});
var cusomers2 = dataContext2.Customers.Select(c => new UnifiedCustomer
{
    CustomerId = c.CustomerId,
    Name = c.CustomerName,
    DifferentField1 = c.DifferentField1,
    DifferentField2 = c.DifferentField2
});

拥有相同类型的两个集合,您可以执行联合:

var all = customers1.Union(customers2);
于 2012-05-17T17:41:58.880 回答
1

完成此操作以便我可以公开单个统一对象的最佳方法是什么?

您可能需要从每个上下文中提取适当的结果,然后使用 LINQ to Objects 对内存中的结果集执行“联合”。

于 2012-05-17T17:11:36.313 回答
0

如果两个数据库映射到同一个类,您可以简单地执行以下操作:

        using (var cx1 = new customerEntities(firstDbConnectionString))
        {
            using (var cx2 = new customerEntities(secondDbConnectionString))
            {
                return cx1.tCustomer.ToList().AddRange(cx2.tCustomer.ToList());
            }
        }
于 2012-05-17T17:31:59.080 回答