5

使用带有 SQL Server Express.mdf数据库的 Entity Framework 4.1。

出于测试目的,我试图在 WPF 应用程序中使用实体模型对 SQL Server Express 数据库执行 CRUD 操作。

我是这个概念的新手,我按照视频教程进行了编码

我创建了一个非常简单的表的实体模型。我在cs文件中编写了简单的代码来使用以下代码向数据库添加一行

testEntities db = new testEntities();
TestTable tb = new TestTable();
tb.Name = txtName.Text;
tb.Email = txtMail.Text;
db.TestTables.AddObject(tb);
db.SaveChanges();

但是,如果我回去检查数据库,则不会添加任何数据。请告诉我这里出了什么问题??

这是我的连接字符串

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="testEntities" 
         connectionString="metadata=res://*/DBModel.csdl|res://*/DBModel.ssdl|res://*/DBModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\SQLEXPRESS;attachdbfilename=|DataDirectory|\test.mdf;integrated security=True;connect timeout=30;user instance=True;multipleactiveresultsets=True;App=EntityFramework&quot;" 
         providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>
4

1 回答 1

6

整个User Instance 和 AttachDbFileName=方法是有缺陷的 - 充其量!Visual Studio 将复制.mdf文件(从DataDirectory正在运行的应用程序的输出目录),并且很可能,您的INSERT工作正常 - 但最终您只是查看了错误的.mdf文件

如果您想坚持使用这种方法,请尝试在.SaveChanges()调用上设置断点 - 然后.mdf使用 SQL Server Mgmt Studio Express 检查正在运行的应用程序目录中的文件 - 我几乎可以肯定您的数据在那里。

我认为真正的解决方案是

  1. 安装 SQL Server Express(反正你已经完成了)

  2. 安装 SQL Server Management Studio Express

  3. 在SSMS Express中创建您的数据库,给它一个逻辑名称(例如TestDatabase

  4. 使用它的逻辑数据库名称(在服务器上创建它时给出)连接到它——不要乱用物理数据库文件和用户实例。在这种情况下,您的连接字符串将类似于:

    Data Source=.\\SQLEXPRESS;Database=TestDatabase;Integrated Security=True
    

    其他一切都和以前完全一样...

于 2012-07-18T19:15:41.730 回答