Entity Framework не сохраняет записи данных в базе данных - PullRequest
5 голосов
/ 07 сентября 2011

Вначале я должен упомянуть, что эта проблема возникает только в приложениях Windows Form, и та же самая программа в веб-режиме, например, с MVC3, прекрасно работает.

Несколько дней назад я написал очень простую программу для создания форм Windows, используя Visual Studio 2010 Ultimate с базой данных SQL Express. Я добавил базу данных, выбрав Add> New item> Service-Based database и модель данных сущности, основанную на этой базе данных таким же образом. Я использовал Entity Framework для добавления некоторых новых записей в таблицы. Я делал это с 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 ]

4 голосов
/ 18 сентября 2011

Наконец, после долгих поисков и запросов, я нашел решение на форумах MSDN благодаря Patrice Scribe Вы можете увидеть его здесь

1 голос
/ 07 сентября 2011

попробуйте это:

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, получилзнать автоматически сгенерированный идентификатор, если он ему нужен.

...