实体框架不会将数据条目保存在数据库中

时间:2011-09-07 05:19:33

标签: .net visual-studio-2010 entity-framework-4 savechanges windows-applications

首先我应该提一下,这个问题只发生在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();
        }
    }
}

2 个答案:

答案 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,以备它需要的时候。