【发布时间】:2012-11-08 21:02:27
【问题描述】:
我使用的是 EF 4.1,并创建了一个普通的 EF edmx 文件。 我从数据库生成它。
生成后,我右键单击并选择添加代码生成项,以生成新类,并改用 DbContext。我使用模板 DbContext 生成器。
一切正常。
然后我尝试查询上下文:
using (var context = new PasDBEntities())
{
var client=context.ClientCompanies.SingleOrDefault(_=>_.ID==clientCompanyId);
if(client!=null)
创建上下文的新实例没有问题,但是当我尝试查询它时,问题就出现了。我卡在了 UnintentionalCodeFirstException 上。 并得到错误:
{"如果在 Code First 模式下使用用于 Database First 和 Model First 开发的 T4 模板生成的代码可能无法正常工作。要继续使用 Database First 或 Model First,请确保在配置文件中指定实体框架连接字符串执行应用程序。要使用从 Database First 或 Model First 生成的这些类,使用 Code First 添加使用属性或 DbModelBuilder API 的任何其他配置,然后删除引发此异常的代码。"}
我不想先使用代码,但我不知道我是否可以“关闭”它,或者问题出在哪里。
供参考,这是我的构造函数...
public partial class PasDBEntities : DbContext
{
public PasDBEntities()
: base("PasDBEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
...和连接字符串:
<connectionStrings>
<add name="PasDBEntities"
connectionString="metadata=res://*/PasDB.csdl|
res://*/PasDB.ssdl|
res://*/PasDB.msl;
provider=System.Data.SqlClient;
provider connection string="
data source=localhost;
initial catalog=PasDB;
integrated security=True;
pooling=False;
multipleactiveresultsets=True;
App=EntityFramework""
providerName="System.Data.EntityClient" />
</connectionStrings>
【问题讨论】:
-
这个连接字符串是否在“执行应用程序的配置文件”中(引用异常),而不仅仅是在库项目的配置文件中?
-
你说的太对了。我不知道我必须在我的单元测试项目中为连接字符串添加一个额外的配置文件才能使用 EF。这解决了我的问题,添加了另一个 app.config 文件。
标签: entity-framework entity-framework-4.1 connection-string database-first