使用带有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>

最佳答案

整个用户实例和AttachDbFileName =方法都有缺陷-充其量! Visual Studio将围绕.mdf文件(从DataDirectory到正在运行的应用程序的输出目录)和最有可能的进行复制,您的INSERT可以正常工作-但您只是在看错误的.mdf文件 !

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

我认为真正的解决方案

  • 安装SQL Server Express(并且您已经完成了此操作)
  • 安装SQL Server Management Studio Express的
  • SSMS Express 中创建数据库,并为其指定一个逻辑名称(例如TestDatabase)
  • 使用其逻辑数据库名称(在服务器上创建时提供)连接到它-并且不要弄乱物理数据库文件和用户实例。在这种情况下,您的连接字符串将类似于:
    Data Source=.\\SQLEXPRESS;Database=TestDatabase;Integrated Security=True
    

    其余所有内容都是,与以前完全相同 ...
  • 10-08 04:57