我有自动化测试解决方案,(比方说)包含3个项目:
我正在努力的是: 首先我得到了这个错误:
No connection string named 'MyEntities' could be found in the application config file
我已经阅读了一些关于堆栈的文章并添加了连接字符串节点(我想避免它),现在我收到了这个错误:
Errors: TestModel.ssdl(2,2) : error 0152: No Entity Framework provider found for the ADO.NET provider with invariant name 'System.Data.SqlClient'. Make sure the provider is registered in the 'entityFramework' section of the application config file.
所以,我的问题是,我做错了什么?如何安装EF而不在每个项目中添加对EF的引用(我相信这是EF现在想要的)。
相关.config节点:
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="mssqllocaldb" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
<connectionStrings>
<add name="test1Entities" connectionString="metadata=res://*/TestModel.csdl|res://*/TestModel.ssdl|res://*/TestModel.msl;provider=System.Data.SqlClient;provider connection string="data source=MSSQL-TEST;initial catalog=testCATALOG;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" <providerName="System.Data.EntityClient" />
</connectionStrings>
现在我从我的3个项目中调用这个方法
public static void TestMyEF()
{
using (var ctx = new test1Entities())
{
var abc = ctx.someTable.FirstOrDefault();
}
}
上下文ctor:
public test1Entities()
: base("name=test1Entities")
{
}
P.S。我正在使用数据库第一种方法(从现有数据库创建.edxm),我有点担心,因为我的.config节点包含<parameter value="mssqllocaldb" />
,数据库不是本地的。
答案 0 :(得分:1)
为结果创建一个公共类库,例如:
public class MyResultClass
{
public readonly object Value;
public readonly Exception ResultException;
//add more properties if needed
public MyResultClass(object value)
{
this.ResultException = null;
this.Value = value;
}
public MyResultClass(Exception ex)
{
this.ResultException = ex;
}
}
然后在项目中使用此类的引用,这样您就不会拥有entity-framework
的依赖关系,然后您可以使用json(序列化和反序列化)来转换数据你的DAP(DataAccessProject)
到客户(调用项目)。