【发布时间】:2014-06-14 19:17:41
【问题描述】:
在this tutorial 之后,我创建了我的DbConfiguration 类:
class ImgSigDbConfig : DbConfiguration
{
public ImgSigDbConfig()
{
SetDefaultConnectionFactory(new LocalDbConnectionFactory("v11.0"));
}
}
并告诉我的DbContext 使用它:
[DbConfigurationType(typeof(ImgSigDbConfig))]
class ImgSimContext : DbContext
{
这似乎连接良好,但我不知道它在哪里存储我的数据,我不喜欢这样。我希望它将所有内容保存到 App_Data 文件夹中的文件中。如何从我的 ImgSigDbConfig 构造函数中指定它? (假设我对 SQL 服务器连接一无所知)
做了更多的挖掘并想出了这个:
public ImgSigDbConfig()
{
var sqlConnBuilder = new SqlConnectionStringBuilder();
sqlConnBuilder.DataSource = ".";
sqlConnBuilder.InitialCatalog = "ImgSim.ImgSimContext";
sqlConnBuilder.IntegratedSecurity = true;
sqlConnBuilder.AttachDBFilename = @"App_Data\database.mdf";
SetDefaultConnectionFactory(new LocalDbConnectionFactory("v11.0", sqlConnBuilder.ToString()));
}
但现在它抛出:
提供者未返回 ProviderManifestToken 字符串
根据 haim 和 gunther 的建议,我删除了多余的连接设置:
class ImgSigDbConfig : DbConfiguration
{
public ImgSigDbConfig()
{
var sqlConnBuilder = new SqlConnectionStringBuilder();
sqlConnBuilder.IntegratedSecurity = true;
sqlConnBuilder.MultipleActiveResultSets = true;
SetDefaultConnectionFactory(new LocalDbConnectionFactory("v11.0", sqlConnBuilder.ToString()));
SetManifestTokenResolver(new DefaultManifestTokenResolver());
}
}
并将它们移到 Program.cs 中:
var conn = new SqlConnectionStringBuilder
{
AttachDBFilename = @"App_Data\database.mdf",
//InitialCatalog = "ImgSim.ImgSimContext",
};
using (var db = new ImgSimContext(conn.ToString()))
但即便如此,我还是得到了带有 InnerException 的 System.Data.Entity.Core.ProviderIncompatibleException:
提供者未返回 ProviderManifestToken 字符串。
即使我设置了SetManifestTokenResolver -- 我猜默认设置不起作用??
【问题讨论】:
-
我不是 EF 专家,所以我可能会听到您所理解的内容 - 但通常您在 web.config 或 app.config 中提供一个名称与您的名称匹配的连接字符串上下文(ImgSimContext)。这将是使用的数据库,因此您可以确切地知道数据的去向。如果这就是你的意思,我会充实一个答案。
-
@Ian 如果我可以直接在 C# 中编写 XML,我宁愿不编写它。我对此一无所知——我已经习惯了 MySQL + linux。在那个环境中,我启动 mysql 守护程序,以编程方式设置一些连接设置,然后连接到它。我可以看到守护进程在我的进程中运行,并且可以在磁盘上找到数据。我可以使用 SqlYog 或 PMA 查看我的数据。我不知道 Visual Studio 为我做了什么。每次我运行我的应用程序时都会启动 SQL Express 服务器吗? “localdb”是sqlite的等价物吗?磁盘上的数据在哪里?如何查看?
-
localDB 是某种轻量级 SQL(不确定到底是什么)。你有 Sql Server Management Studio 吗?如果是这样,请启动与
(localdb)\v11.0的连接,我认为您会看到列出的数据库 -
为什么用无效的连接字符串初始化上下文?
-
@haim770:嗯..?因为我不知道自己在做什么?