使用实体框架创建数据访问项目

时间:2018-05-02 09:08:38

标签: c# entity-framework

我有自动化测试解决方案,(比方说)包含3个项目:

  1. DataAccessProject(从db获取数据,因此可以作为生产者调用,它是我的StartUpFile)
  2. PageObjectStorage
  3. 场景和步骤项目 我要做的是使1.项目使用EF,而不通知任何其他项目EF甚至存在于解决方案中。我希望(例如)我的第三个项目能够调用类似DataAccessProject.SomeMethod.GiveMeSomeUsers()的内容,因此DataAccessProject将从实体获取记录,执行魔术并简单地返回信息以与页面对象中的值进行比较。
  4. 我正在努力的是: 首先我得到了这个错误:

    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=&quot;data source=MSSQL-TEST;initial catalog=testCATALOG;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;"         <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" />,数据库不是本地的。

1 个答案:

答案 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)到客户(调用项目)。