【问题标题】:Multiple DbContexts Different Databases多个 DbContexts 不同的数据库
【发布时间】:2013-11-29 15:28:38
【问题描述】:

我是 EF Code First 的新手,并且已经享受了好几个星期了。我面临处理 2 个数据库(都在同一个 Sqlserver 中)。第一个数据库包含一个表,我只需为其主键引用它,它与我创建的表(第二个 DbContext - 第二个数据库)“逻辑上”相关。基于此键,我将查询我的第二个 DbContext 表(mvc 站点的实际相关表)。顺便说一句,Customer 有 0..* CustomerUsers。

第一个数据库上下文:

public class Customer
{

    [StringLength(10, MinimumLength = 3), Required]
    public string CompanyID { get; set; }

    [StringLength(8, MinimumLength = 3)]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public string CustomerID { get; set; }


    [StringLength(500)]
    public string CustomerName { get; set; }


    //*Initially, under the same dbContext, they were related, but now am separating
    //them because of physical database separation; hence the navigation property   
    //public virtual ICollection<CustomerUser> CustomerUsers { get; set; }

}

在 OnModelCreating 方法中:

modelBuilder.Entity<Customer>()
            .HasKey(c => new { c.CompanyID, c.CustomerID});

“逻辑上”相关的实体

public class CustomerUser
{

    [Display(Name = "Customer ID")]
    public int CustomerUserID { get; set; }

    //[ForeignKey("Customer")]
    [Display(Name = "CompanyID"), Required]
    [StringLength(10, MinimumLength = 3)]
    public string CompanyID { get; set; }

    //[ForeignKey("Customer")]
    [Display(Name = "CustomerID"), Required]
    [StringLength(8, MinimumLength = 3)]
    public string CustomerID { get; set; }


    [StringLength(50), Display(Name = "First Name"), Required]
    public string FirstName { get; set; }

    [StringLength(50), Display(Name = "Last Name"), Required]
    public string LastName { get; set; }

    //*Initially related thru foreign key to Customer but separation of database
    //thus no more relations – just a querying of Customer’s id from other database
    //public virtual Customer Customer { get; set; }


}

OnModel创建方法:

modelBuilder.Entity<CustomerUser>()
            .HasKey(c => new { c.CustomerUserID });

        modelBuilder.Entity<CustomerUser>()
            .HasRequired(p => p.Customer)
            .WithMany(c => c.CustomerUsers)
            .HasForeignKey(p => new {p.CompanyID, p.CustomerID});

如何以及在哪里声明我的 DbContexts?目前,我有一个 Web 应用程序引用的程序集。另外,这对我的部署有何影响?仅用于引用其键的一个表已经存在,而其余的表,我将尚未在 SqlServer 中创建(它们存在于我的 VS2012 服务器资源管理器中)。

这种设计会遇到任何与部署相关的问题吗?

【问题讨论】:

    标签: asp.net-mvc entity-framework


    【解决方案1】:

    我如何以及在哪里声明我的 DbContexts?

    大问题。数据访问层是典型的。不在核心/域层中。这将核心与 EF 耦合。

    目前我有一个 Web 应用程序引用的程序集。还, 这对我的部署有何影响?

    如果不使用 CORE/DOMAIN 层 + 数据访问层 + UI 层,开发将与数据访问工具紧密耦合。

    仅用于引用其键的一个表已经存在, 而其余的表,我还没有创建 SqlServer(它们存在于我的 VS2012 服务器资源管理器中)。会有吗 这种设计可能会遇到任何与部署相关的问题吗?

    不,一个解决方案的多上下文多数据库访问对于 EF 来说没有问题。 尽管您实例化上下文的方式需要仔细管理。 例如https://stackoverflow.com/a/20118259/1347784

    【讨论】:

    • 您好菲尔,感谢您的回复。正如您提到的关于 EF 对多个 DB 访问没有任何问题(我是 EF 的新手,我的理解是每个 DB 访问都由 DbContext 表示?)。这是否意味着我的 web.config 中可以有 2 个连接字符串,例如: (以上连接字符串将指向部署环境中的实际数据库)
    • 是的,你可以有多个连接字符串,或者你可以在构造函数中将连接信息传递给 DbContent
    猜你喜欢
    • 2014-01-29
    • 2017-07-07
    • 1970-01-01
    • 2018-01-07
    • 2014-12-03
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 2019-10-28
    相关资源
    最近更新 更多