C# VS正在其他数据库中存储我的数据?

C# VS正在其他数据库中存储我的数据?,c#,sql-server,entity-framework,C#,Sql Server,Entity Framework,VisualStudio凭空创建了一个新的数据库来存储我的数据。这是我的DbContext: public class LinkedDataContext : DbContext { public DbSet<LinkedData> LinkedData { get; set; } } 为保存自定义数据而不断自动生成的数据库称为:DataVisualization.Model.LinkedDataContext 有人知道这里到底发生了什么吗?标准行为。尽管情况很糟糕。每次点

VisualStudio凭空创建了一个新的数据库来存储我的数据。这是我的DbContext:

public class LinkedDataContext : DbContext
{
    public DbSet<LinkedData> LinkedData { get; set; }
}
为保存自定义数据而不断自动生成的数据库称为:
DataVisualization.Model.LinkedDataContext


有人知道这里到底发生了什么吗?

标准行为。尽管情况很糟糕。每次点击“调试”按钮时,数据库模板都会复制到运行时,因此您总是从一个新数据库开始。非常痛苦。不知道其他人是如何解决这个问题的-我从不使用visual studio的这一面,我安装了sql server并在那里手动创建数据库。确保我始终使用已定义的副本。显然,VS无权在那里创建数据库;)

如果你有点费心使用谷歌或网站搜索,你会发现很多类似的问题——这是人们经常遇到的一个标准问题,因为这完全不是他们所期望的


(如果你问我,EF的整个数据库维护端都坏了,包括几乎不能使用SQL Server最基本功能的“迁移”。

我相信这只是
Web.config
中的连接字符串。从项目外部的现有数据库创建
DbContext
时,Visual Studio会提示

您选择的连接使用的本地数据文件不在 当前项目。是否要将该文件复制到项目中,然后重试 修改连接

如果选择“是”,则会将数据库文件复制到项目中,将其生成操作设置为内容,在连接字符串中设置对其的相对引用,并将其设置为在生成时复制到输出目录

如果修改
Web.config
中的
connectionString
以指向应设置的正确数据库(为了将来参考,当询问是否要复制它时,请回答否,除非这确实是您想要做的-例如,对于使用二进制文件分发的数据库文件)

例如,请参见下面列出的两个连接。如果选择“是”,则会看到类似于
ProjectContext
的内容,如果选择“否”,则会看到类似于
ExternalContext
的内容

  <connectionStrings>
    <add name="ProjectContext" connectionString="data source=(LocalDB)\MSSQLLocalDB;attachdbfilename=|DataDirectory|\Database.mdf;integrated security=True;connect timeout=30;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
    <add name="ExternalContext" connectionString="data source=(LocalDB)\MSSQLLocalDB;attachdbfilename=C:\Programming\.Net\DataVisualization\Data\DataVisualization\App_Data\Database.mdf;integrated security=True;connect timeout=30;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
  </connectionStrings>


请注意,
connectionString
的实际语法在应用程序中可能会有所不同,具体取决于所使用的设置,但关键部分是
|DataDirectory |
参考与正确路径。路径就是您需要修改的路径。

简写解决方案如下:

public class LinkedDataContext : DbContext
{
    public DbSet<LinkedData> LinkedData { get; set; }
    public LinkedDataContext() : base("DefaultConnection")
    {
    }
}
公共类LinkedDataContext:DbContext { 公共数据库集链接数据{get;set;} 公共LinkedDataContext():基(“DefaultConnection”) { } } 我假设如果没有以上下文命名的连接,它将采用默认连接。原因是我没有得到一个错误,所以连接会很好。但是,如果不在
web.config
中指定connectionString,它似乎只是默认字符串的一部分,因为它确实找到了我的数据库,并抛出了它的名称空间,并且凭空创建了一个新的数据库。我可能是MVC新手,但我发现这种荒谬的默认行为。所以我仍然不知道这背后的想法是什么

除非您想为一个相当大的应用程序提供几百个连接字符串,否则唯一的方法似乎是调用父构造函数并在那里指定
DefaultConnection
。具有讽刺意味的是,你必须“指定”默认行为

与@tomtom告诉我的不同,在近10个小时内,我没有发现一个类似于我的场景。也许我不清楚,但在我最初的帖子中,我确实详细说明了我采取的每一步。似乎没有必要使用MSSQL服务器


希望这对其他人有所帮助。

这里的哪些代码与MVC相关?运行代码不会使问题特定于MVC,我在这里看不到一行与特定于MVC的问题相关的内容。您是否考虑调试?@ TimToM,我添加了一个模型和一个创建视图的控制器。这是MVC的简写。我没有收到任何错误,它只是创建了一个新的数据库,就像你在屏幕截图中看到的那样,每当我创建记录时,它都会将它们存储在那里,而不是“假定”保存数据的数据库。这并不重要,因为“视图”只是“一个类”(至少是与问题相关的类型),你对控制器不做任何操作。您可以轻松地将相关代码复制/粘贴到命令行应用程序中-问题保持100%不变。因此,您未能按照现场规则提供代码示例(尽可能短的代码)。其中不包括asp.net,因为您没有与问题相关的asp.net特定内容。因此,投票结束。@TomTom除了(可能)一些不正确的标签外,我看不出这个问题出了什么问题。不要关闭,只需删除不正确的标记。@tomtom这就是我所做的一切。。。从我在VS-2015中创建了一个新的MVC 5项目开始,我一步一步地解释。你还想要什么<代码>添加数据库->添加表->填充表->添加模型->创建控制器但是visual studio没有使用最初用于创建模型控制器的数据库,它似乎只是凭空创建了一个新的数据库。我已经搜索了我的bum off。但我不知道这是一个EF问题,所以搜索“VS将数据放入不同的数据库”不会产生太多相关的内容。但我昨天在运行教程时做了这项工作,这只是偶尔发生的事情吗?真的不知道,主要是因为多年来我每天都在处理数据库,但我从来没有相信这些自动化。我做复杂的&有时是大型数据库工作。环境的完全控制总是很关键的,所以我从不相信那些自动装置。但是很多人在调试过程中都会遇到VisualStudio数据库管理行为的问题。正如我所说的,我绕过这些。好的
public class LinkedDataContext : DbContext
{
    public DbSet<LinkedData> LinkedData { get; set; }
    public LinkedDataContext() : base("DefaultConnection")
    {
    }
}