使用相同的实体框架模型对多个项目进行单元测试

时间:2015-04-21 12:54:36

标签: c# entity-framework unit-testing

情况如下:

我有一个包含3个项目的解决方案

  1. 服务
  2. 网络
  3. 单元测试
  4. 在网络和服务中,我每个文件夹都有一个名为data的文件夹,其中包含一个MyEntityModel.edmx

    现在,我正在对每个服务和Web项目进行单元测试。如果我一个接一个地运行测试(或者只是从单个项目中测试),测试工作正常但是如果我一次运行所有测试他会对第一个项目进行第一次测试,但是当他参加第二个项目的测试时得到一个错误:

    Test method MyProject.UnitTests.TExcelExport.TOfficeList threw exception: 
    System.Data.Entity.Core.MetadataException: Schema specified is not valid. Errors: 
    he mapping of CLR type to EDM type is ambiguous because multiple CLR types match the 
    EDM type 'EmployeesCumulated'. Previously found CLR type 
    'MyProject.Services.Data.Employees', newly found CLR type 
    'MyProject.Web.Data.Employees'.
    .....
    

    当我使用模型时,我这样做:

    using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew, TimeSpan.FromMinutes(20)))
                {
                    using (MyProject.Services.Data.MyEntities myEntities = new Swietelsky.WhoIsWho.Transfer.Data.MyEntities())
                    {
                           List<Employees> employees = myEntities.Employees.ToList();
                           ....
    

    我已经尝试过将整个命名空间放入使用中,....但这不起作用。

    所以我的问题是: 有没有办法处理这个问题,以便单元测试可以一起运行(也就是单击单元测试项目并单击运行所有单元测试)?

1 个答案:

答案 0 :(得分:1)

我会创建一个新项目来保存您的实体。您可以在该项目中放置1份EDMX,并让该项目构建您的实体。然后,Web和服务将引用该项目并访问其中的实体。

此方法的另一个好处是您只需要维护1个EDMX,因此如果您需要更改您的实体,您只需要在一个地方进行。