您好,我的服务器有一些具有相同架构的数据库。我使用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开发。
我该怎么做?
答案 0 :(得分:1)
EF使用的行为取决于连接字符串的外观。如果它包含metadata
这样的属性:
metadata=res://*/model.csdl|res://*/model.ssdl|res://*/model.msl;
它会假设您正在使用数据库或模型第一次开发。
要确保使用Code First,请删除连接字符串的metadata
部分。