سؤال

في البداية يجب أن أذكر أن هذه المشكلة تحدث فقط في تطبيقات Windows Forms وأن نفس البرنامج في وضع الويب على سبيل المثال مع MVC3 يعمل بشكل مثالي.

منذ بضعة أيام، قمت بكتابة برنامج نموذج Windows بسيط للغاية باستخدام Visual Studio 2010 Ultimate مع قاعدة بيانات SQL Express.لقد أضفت قاعدة البيانات عن طريق اختيار إضافة > عنصر جديد > قاعدة البيانات المستندة إلى الخدمة ونموذج بيانات الكيان بناءً على قاعدة البيانات هذه بنفس الطريقة.لقد استخدمت إطار الكيان لإضافة بعض السجلات الجديدة إلى الجداول.لقد فعلت مثل هذا الشيء مع 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();
        }
    }
}
هل كانت مفيدة؟

المحلول

وأخيرا وبعد الكثير من البحث والسؤال وجدت الحل في MSDN المحافل بفضل <م> باتريس الكاتب بإمكانك رؤيته هنا

نصائح أخرى

جرب هذا:

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 (معرف البيانات) لأنه سيتم تعيينه بواسطة قاعدة البيانات، أقوم بإعادته إلى المتصل حتى يتعرف من قام باستدعاء طريقة الحفظ على المعرف الذي تم إنشاؤه تلقائيًا، في حالة احتياجه إليه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top