我是EF Code First的新手,现在已经好几个星期了。我面临处理2个数据库(都在同一个Sqlserver中)。第一个数据库包含1个表,我只需要引用它的主键,它与我创建的表“逻辑”相关(第二个DbContext - 第二个数据库)。基于此密钥,我将查询我的第二个DbContext表(mvc站点的实际相关表)。顺便说一句,客户有0 .. * CustomerUsers。
第一个dbcontext:
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; }
}
OnModelCreating方法:
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服务器资源管理器中)。
我可能会遇到与此设计相关的任何与部署相关的问题吗?
答案 0 :(得分:0)
我如何以及在何处声明我的DbContexts?
大问题。数据访问层是典型的。不在核心/域层中。将核心与EF结合起来。
目前我有一个由Web应用程序引用的程序集。也, 这对我的部署有什么影响?
如果你不使用CORE / DOMAIN Layer +数据访问Layer + UI Layer,那么开发将与数据访问工具紧密结合。
用于仅引用其密钥的一个表已经存在, 而其他表格,我还没有创建 SqlServer(它们存在于我的VS2012服务器资源管理器中)。会的吗? 是否可能与此设计相关的任何与部署相关的问题?
不,从一个解决方案多个上下文多个数据库访问对EF来说不是问题。 虽然您需要谨慎管理实例化上下文的方式。 例如https://stackoverflow.com/a/20118259/1347784