[英]Can I union an object from multiple databases in Entity Framework?
我正在尝试找出解决此问题的最佳方法。 我在两个不同的数据库中有一个Customer表(我知道不是很理想,但是不能修改,我必须使用给出的内容)。 记录保持同步并共享多个字段(例如,CustomerId,CustomerName等)。 但是它们每个人都有各自独特的字段...因此,例如:
Database1客户
Database2客户
每个数据库都有其自己的dbContext,我可以独立地从中提取每个Customer对象。 但是我真正想要拥有的是一个统一的Customer对象,其中包括两个数据库中所有字段的并集。
什么是实现此目的以便暴露单个统一对象的最佳方法?
编辑:我正在使用DbSet并为我的上下文对象中的每个实体指定一个映射,如下所示:
public DbSet<Customer> Customers { get; set; }
然后我的映射类具有典型的映射信息:
this.ToTable("Customer");
this.HasKey(t => t.CustomerId);
this.Property(t => t.CustomerName);
等。因此,我正在寻找一种方法,以使用多个表/数据库扩展此逻辑,并且不仅可以执行查询,还可以执行所有必要的CRUD操作
谢谢
您需要做的就是声明一个代表统一对象的类:
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);
什么是实现此目的以便暴露单个统一对象的最佳方法?
您可能需要从每个上下文中提取适当的结果,然后使用LINQ to Objects对内存中的结果集执行“联合”。
如果将两个数据库映射到同一类,则可以执行以下操作:
using (var cx1 = new customerEntities(firstDbConnectionString))
{
using (var cx2 = new customerEntities(secondDbConnectionString))
{
return cx1.tCustomer.ToList().AddRange(cx2.tCustomer.ToList());
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.