首先我应该提一下,这个问题只发生在Windows窗体应用程序中,并且在Web模式下的相同程序(例如MVC3)工作正常。
前几天我使用Visual Studio 2010终极版和SQL Express数据库编写了一个非常简单的Windows窗体程序。我通过选择Add>添加了数据库。新项目>基于服务的数据库和基于该数据库的实体数据模型以相同的方式。我使用Entity框架向表中添加一些新记录。我之前用VS 2008 SP1做过这样的事情没有问题,所以我做了同样的事情。程序编译并运行没有错误,我输入了一些新数据。退出程序后,我回到了数据库,没有发生任何事情。我输入的所有信息都没有保存。 我一步一步地调试程序,一切都很好。 下面的代码与一个带有上述问题的非常简单的程序有关。数据库有一个表(书):
namespace Book
{
public partial class BookForm : Form
{
BookDatabaseEntities db = new BookDatabaseEntities();
public BookForm()
{
InitializeComponent();
}
private void saveButton_Click(object sender, EventArgs e)
{
Book bookToCreate = new Book();
bookToCreate.Id = Guid.NewGuid();
bookToCreate.Title = titleTextBox.Text;
db.Books.AddObject(bookToCreate);
db.SaveChanges();
}
}
}
如果有人帮助我,我将非常感激。提前谢谢。
.................
编辑后:
namespace Book
{
public partial class BookForm : Form
{
//BookDatabaseEntities db = new BookDatabaseEntities();
public BookForm()
{
InitializeComponent();
}
private void saveButton_Click(object sender, EventArgs e)
{
var db = new BookDatabaseEntities();
var bookToCreate = db.Books.CreateObject();
//Book bookToCreate = new Book();
bookToCreate.Id = Guid.NewGuid();
bookToCreate.Title = titleTextBox.Text;
db.AcceptAllChanges();
db.Books.AddObject(bookToCreate);
db.SaveChanges();
}
}
}
答案 0 :(得分:4)
最后经过大量搜索并询问我在MSDN论坛中找到了解决方案,感谢 Patrice Scribe 你可以看到 here
答案 1 :(得分:1)
试试这个:
db.Attach(bookToCreate);
db.SaveChanges();
修改强>
我在生产中的类库(我的DAL)中有这个代码,它运行正常:
using (var dbContext = new DbEntities())
{
var job = dbContext.RiskToolJob.CreateObject();
job.AnalysisDataID = analysisDataID;
job.JobRmsAnalysisID = RMSAnalysisID;
job.UserName = userName;
job.JobCreated = DateTime.UtcNow;
dbContext.RiskToolJob.AddObject(job);
dbContext.SaveChanges();
return job.DataId;
}
请注意,实际上我没有分配PK( DataId ),因为它将由数据库分配,我将它返回给调用者,以便调用save方法的人知道自动生成的ID,以备它需要的时候。