c# - 如何从 Entity Framework 中的多个数据库/表创建单个对象

标签 c# .net entity-framework

我将客户数据存储在两个不同的数据库中。这些记录保持同步并共享多个字段(例如 CustomerId、CustomerName 等)。但他们也各自有自己独特的领域...例如:

数据库1客户

CustomerId
CustomerName
Field1
Field2

数据库2客户

CustomerId
CustomerName
DifferentField1
DifferntField2

每个数据库都有自己的 dbContext,我可以从中独立地提取每个 Customer 对象。但我真正想要的是使用单个 dbContext 将所有字段拉入统一的 Customer 对象,其中包括两个数据库中所有字段的并集。这是否可能或可取?

上下文中的其余对象会使用 DbSets 自动连接,并为每个实体指定映射,如下所示:

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

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

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

所以我想知道是否有一种方法可以使用多个表/数据库构建此逻辑,并且不仅能够执行选择,还能够执行所有必要的 CRUD 操作。这是否可以通过覆盖默认行为来实现?或者我处理这个问题的方式是否有偏差?

谢谢

最佳答案

您可能应该考虑将数据库上下文抽象到存储库中。因此,您的存储库负责将不同层的所有数据编码到单个对象中供您使用,然后每个 DBContext 仅负责其特定层。

public CustomerRepository
{
    public Customer GetCustomerFor(int customerId)
    {
        var tier1Obj = Tier1DBContext.Customers.First(x => x.CustomerId == customerId);
        var tier2Obj = Tier2DBContext.Customers.First(x => x.CustomerId == customerId);

        // merge them into some new object

        return mergedCustomerObject;
    }
}

除非您从数据库本身进行某种链接服务器调用并在一个上下文中公开该值(我不建议这样做),否则不会有两层。

关于c# - 如何从 Entity Framework 中的多个数据库/表创建单个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10657784/

相关文章:

c# - 如何使用带有 c# 的 asp.net 4.0 使用自动完成扩展程序

c# - 使用 OData QueryableAttribute 修改从 ASP.NET Web API 返回的响应内容

c# - 使用 linq 更改数组中的一个字段

c# - asp.net网站文件下载历史记录

c# - Internet Explorer 能否以编程方式使用 Socks 代理?

.net - 启用 ODP.Net 性能计数器

MySql:身份验证方法 'caching_sha2_password' 失败

c# - WPF 程序抛出无法解释的调用异常

c# - 如何避免 EF 生成的查询中的 N+1

entity-framework - EF Code First 当模型需要更改时,有什么方法不必删除 DB?