gpt4 book ai didi

entity-framework - 如何为 EF Code First 配置 ProviderManifestToken

转载 作者:行者123 更新时间:2023-12-03 07:11:58 26 4
gpt4 key购买 nike

我有一个使用 EF 代码优先的 asp.net MVC3 项目。对于我的单元测试,我一直使用 SQL Server CE 4.0 和 SQL Server 2008 Express。两者都与 EF 完美配合,按预期生成我的数据库。

但是,当我在单元测试之外运行应用程序并将其指向我的连接字符串时,我收到错误

ProviderIncompatibleException: The provider did not return a ProviderManifestToken string

我已阅读有关此内容的 MS 文档,看来这是 EF 模型生成的 SqlVersion token 。问题是我使用的是代码优先方法,因此我没有 .edmx 文件,也不知道将元数据信息指向哪里,因为数据库尚未生成。

我知道我的连接字符串数据库名称、用户名和密码都是正确的,因为将它们更改为错误的值会引发预期的错误。不知道从哪里开始。

谢谢。

这是我的连接字符串:

<connectionStrings>
<add
name="SqlConnection"
providerName="System.Data.SqlClient"
connectionString="Data Source=WORKSTATION\SQLEXPRESS;Initial Catalog=CodeFirst;Integrated Security=False;
Persist Security Info=False;User ID=CodeFirst_user;Password=password1;Connect Timeout=120;MultipleActiveResultSets=True;"/>
</connectionStrings>

最佳答案

如果您使用 EF 6(刚刚发布),您还有一个替代方案。

依赖解析

您可以使用新的 dependency resolution注册 IManifestTokenResolver 实现的功能(在 this preview documentation 中描述为 IManifestTokenService)。

This article提供了有关如何使用 DbConfiguration 的更多信息。最简单的使用方法是这样的:

DbConfigurationType(typeof(EntityFrameworkDbConfiguration))]
public class MyContextContext : DbContext
{
}

此示例在为 SQL Server 连接构建元数据时避免了对数据库的任何访问,并自动指定 SQL Server 2005 兼容性。

using System.Data.Common;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Data.Entity.Infrastructure.DependencyResolution;
using System.Data.SqlClient;

/// <summary>
/// A configuration class for SQL Server that specifies SQL 2005 compatability.
/// </summary>
internal sealed class EntityFrameworkDbConfiguration : DbConfiguration
{
/// <summary>
/// The provider manifest token to use for SQL Server.
/// </summary>
private const string SqlServerManifestToken = @"2005";

/// <summary>
/// Initializes a new instance of the <see cref="EntityFrameworkDbConfiguration"/> class.
/// </summary>
public EntityFrameworkDbConfiguration()
{
this.AddDependencyResolver(new SingletonDependencyResolver<IManifestTokenResolver>(new ManifestTokenService()));
}

/// <inheritdoc />
private sealed class ManifestTokenService : IManifestTokenResolver
{
/// <summary>
/// The default token resolver.
/// </summary>
private static readonly IManifestTokenResolver DefaultManifestTokenResolver = new DefaultManifestTokenResolver();

/// <inheritdoc />
public string ResolveManifestToken(DbConnection connection)
{
if (connection is SqlConnection)
{
return SqlServerManifestToken;
}

return DefaultManifestTokenResolver.ResolveManifestToken(connection);
}
}
}

关于entity-framework - 如何为 EF Code First 配置 ProviderManifestToken,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4741499/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com