无法在单元测试中创建我的DbContext

时间:2013-02-20 20:59:08

标签: entity-framework code-first

当我在单元测试中创建TLPContext时,我在本页底部会出现异常。

我在单元测试中做到了这一点:

DbContext context = new TLPContext();
context.Database.CreateIfNotExists();

这不是正确的方法吗?

我的连接字符串/提供程序有什么问题?

我已经遵循了这个:http://www.thereforesystems.com/turn-on-msdtc-windows-7/

但重新启动后无效。

我的单元测试项目中的app.config文件:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
  </entityFramework>
  <connectionStrings>
    <add name="TLPContext" providerName="System.Data.SqlClient" connectionString="Data Source=LISA\SQLEXPRESS;Initial Catalog=TLPTEST;Integrated Security=True;Pooling=False;"/>
  </connectionStrings>
</configuration>

这是我的DbContext,它应该足以创建数据库而不是表...

public class TLPContext : DbContext
{

}

这是我得到的例外:

当我在单元测试SetUp中创建TLPContext实例时:

Test 'TLP.DataAccess.UnitTests.GenericRepositoryTests.Test' failed: System.Data.ProviderIncompatibleException : An error occurred while getting provider information from the database. This can be caused by Entity Framework using an incorrect connection string. Check the inner exceptions for details and ensure that the connection string is correct.
---- System.Data.ProviderIncompatibleException : Der Anbieter hat keine ProviderManifestToken-Zeichenfolge zurückgegeben.
-------- System.Data.SqlClient.SqlException : MSDTC on server 'LISA\SQLEXPRESS' is unavailable.
    at System.Data.Entity.ModelConfiguration.Utilities.DbProviderServicesExtensions.GetProviderManifestTokenChecked(DbProviderServices providerServices, DbConnection connection)
    at System.Data.Entity.ModelConfiguration.Utilities.DbConnectionExtensions.GetProviderInfo(DbConnection connection, DbProviderManifest& providerManifest)

1 个答案:

答案 0 :(得分:0)

如果您不使用连接字符串,它将自动查找数据库服务器(它搜索SQLEXPRESS)并根据您项目的名称创建数据库。

您缺少的是提供连接字符串或其名称,这可以通过使用DbContext的构造函数之一来实现:

TLPContext(string connectionStringOrName) : DbContext(connectionStringOrName) {}

我希望这有帮助!