gpt4 book ai didi

entity-framework - Entity Framework : Sharing entities across different DbContexts

转载 作者:行者123 更新时间:2023-12-04 02:09:47 28 4
gpt4 key购买 nike

我正在使用 EF6 开发插件应用程序,代码优先。

我有一个名为 User 的实体的主要上下文。 :

public class MainDataContext : DbContext
{
public MainDataContext(): base("MainDataContextCS") {}
public DbSet<User> Users { get; set; }
}

然后是 PluginX 的另一个上下文,在另一个引用基础的项目上:
public class PluginDataContext : DbContext
{
public PluginDataContext () : base("MainDataContextCS") {
}

protected override void OnModelCreating(DbModelBuilder modelBuilder) {
modelBuilder.HasDefaultSchema("PluginX");
base.OnModelCreating(modelBuilder);
}

public DbSet<Booking> Bookings { get; set; }
}

这在同一个数据库(相同的连接字符串)上巧妙地创建了 PluginX.Bookings table 。

这里的问题是 Booking实体包含对 User 的引用实体:
public class Booking
{
public int Id { get; set;}
public virtual User CreationUser { get; set;}
public BookingStatus Status { get; set; }
}

运行时 Add-Migration对于插件上下文,EF 将尝试创建另一个 User名为 PluginX.User 的实体.

如何解决?有没有办法共享一个共同的实体,在另一个 DbContext ?

最佳答案

当您使用多个上下文时,您有两种选择:

  • 将每个上下文视为单独的应用程序。想象一下,您的用户是您从 Web 服务获得的外部资源。您将无法为其添加外键。你要做的就是在你的表中只添加 userId,当你需要用户详细信息时调用外部服务来获取它们,或者在 Bookings 上下文中拥有用户的本地轻拷贝,你会不时更新从用户上下文。当您使用大型系统并且想要隔离各个部分时,这种方法非常有用(阅读有关 DDD 和有界上下文)
  • 除了您的 2 个上下文之外,使用整个模型(用户、预订等)创建第三个上下文。您将使用完整的上下文来创建迁移并维护数据库结构,但在应用程序中您将使用较小的上下文。这是一个非常简单的解决方案。使用单个上下文维护迁移很容易,它仍然允许您在无法访问不相关实体的较小上下文中隔离数据库操作。
  • 关于entity-framework - Entity Framework : Sharing entities across different DbContexts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27969861/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com