EF首先更改数据库连接字符串

时间:2018-03-28 07:59:58

标签: c# entity-framework

您好,我的服务器有一些具有相同架构的数据库。我使用EF6数据库/模型优先代码,我不想为它们创建威慑DbContext。例如,我生成的DbContext是:

public partial class TEST_Rev5_FINALEntities : DbContext
{
    public TEST_Rev5_FINALEntities()
        : base("name=TEST_Rev5_FINALEntities")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

    public virtual DbSet<Header> tbl_Headers { get; set; }
    public virtual DbSet<Output> tbl_Output { get; set; }
    public virtual DbSet<Run> tbl_Run { get; set; }
}

我创建了一个部分类来设置连接字符串

public partial class TEST_Rev5_FINALEntities : DbContext 
{
    public TEST_Rev5_FINALEntities(DbConnection dbConnection)
        : base(dbConnection, true)
    {
    }
}

我有以下方法来创建与威慑连接字符串的连接:

public DbConnection GetConnectionString()
{
    DbConnection conn;
    SqlConnectionStringBuilder sqlConnectionStringBuilder = new SqlConnectionStringBuilder
    {
        DataSource = DataSource,
        IntegratedSecurity = false,
        UserID = User,
        Password = Password,
        MultipleActiveResultSets = true
    };

    SqlConnectionFactory sqlConnectionFactory = new SqlConnectionFactory(sqlConnectionStringBuilder.ConnectionString);
    conn = sqlConnectionFactory.CreateConnection(DatabaseName);

    return conn;
}

最后我尝试像这样运行它:

using (var context = new TEST_Rev5_FINALEntities(_dal.Connector.GetConnectionString()))
{
    return context.tbl_Headers.FirstOrDefault();
}

但是我收到了这个错误:

  

System.Data.Entity.Infrastructure.UnintentionalCodeFirstException
  HResult = 0x80131509 Message =正在Code First中使用上下文   使用从EDMX文件生成的代码的模式   Database First或Model First开发。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

EF使用的行为取决于连接字符串的外观。如果它包含metadata这样的属性:

metadata=res://*/model.csdl|res://*/model.ssdl|res://*/model.msl;

它会假设您正在使用数据库或模型第一次开发。

要确保使用Code First,请删除连接字符串的metadata部分。