我正在学习实体框架并有一个问题。为什么在使用EF Code First和Reverse Engineering现有数据库时,我的上下文类中是否有两个构造函数?我相信下面的例子,第一个是确保我的数据库没有重新创建,因为我连接到现有的数据库,SixteenthSectionLegacy,第二个是识别我的app.config文件中使用的连接字符串...为什么不能&#39 ; t /不应该都在第一个构造函数中吗?
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using EFReverseEngineerTest.Models.Mapping;
namespace EFReverseEngineerTest.Models
{
public partial class SixteenthSectionLegacyContext : DbContext
{
static SixteenthSectionLegacyContext()
{
Database.SetInitializer<SixteenthSectionLegacyContext>(null);
}
public SixteenthSectionLegacyContext()
: base("Name=SixteenthSectionLegacyContext")
{
}
public DbSet<board> boards { get; set; }
public DbSet<BOARD1> BOARDS1 { get; set; }
public DbSet<Classification> Classifications { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new boardMap());
modelBuilder.Configurations.Add(new BOARD1Map());
modelBuilder.Configurations.Add(new ClassificationMap());
}
}
}
答案 0 :(得分:0)
: base("Name=SixteenthSectionLegacyContext")
告诉EF默认情况下它应该使用哪些连接字符串。在代码中创建SixteenthSectionLegacyContext实例时,可以传递自己的连接字符串名称。
using (var context = new SixteenthSectionLegacyContext("SixteenthSectionLegacyContext_2"))
{
}
在app.config
<connectionStrings> </connectionStrings>
中添加第二个连接字符串名称
这就是为什么有2个,如果你没有传递任何东西,则使用默认的连接字符串。