【问题标题】:EF first database change connection stringEF第一个数据库更改连接字符串
【发布时间】:2018-03-28 07:59:57
【问题描述】:

您好,我有一些具有相同架构的数据库的服务器。我使用 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 文件生成的代码的模式 数据库优先或模型优先开发。

我该怎么做?

【问题讨论】:

  • 你能发布你在连接中使用的模式吗?
  • Data Source=gsql;Initial Catalog=TEST_Rev5_FINAL;Integrated Security=False;User ID=***;Password=***;MultipleActiveResultSets=True 我想这就是问题所在。谢谢喷子
  • 参考 Martining Zikmunds 的回答。这应该是正确的
  • 哦,我很惊讶元数据部分不存在:-O

标签: c# entity-framework


【解决方案1】:

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

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

它将假定您正在使用数据库或模型优先开发。

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

【讨论】:

猜你喜欢
  • 2014-10-12
  • 2018-07-04
  • 2016-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-01
  • 2023-03-17
  • 2017-09-09
相关资源
最近更新 更多