سؤال

على الرغم من أنني قمت بتمييز عمود الهوية الخاص بي مع .Identity(), ، مخطط قاعدة البيانات الذي تم إنشاؤه ليس لديه IDENTITY تعيين إلى True ، مما يعطيني المشاكل عندما أضيف السجلات. إذا قمت بتحرير مخطط قاعدة البيانات يدويًا (في استوديو إدارة SQL) للحصول على Id عمود ملحوظ IDENTITY, ، كل شيء يعمل كما أريد - لا يمكنني جعل EF يفعل ذلك بنفسه.

هذا هو رسم الخرائط الكامل الخاص بي:

public class EntryConfiguration : EntityConfiguration<Entry>
{
    public EntryConfiguration()
    {
        Property(e => e.Id).IsIdentity();
        Property(e => e.Amount);
        Property(e => e.Description).IsRequired();
        Property(e => e.TransactionDate);

        Relationship(e => (ICollection<Tag>)e.Tags).FromProperty(t => t.Entries);
    }
}

بينما أستخدم EF لبناء قاعدة البيانات وإعادة بناءها لاختبار التكامل ، أحتاج حقًا إلى القيام بذلك تلقائيًا ...

تعديل:HM ... في تعليق ، طُلب مني إعطاء رمز كافي لتنفيذ هذا ، لذلك قمت بقطع الرمز الخاص بي في تطبيق وحدة تحكم (لذلك لن تحتاج إلى جميع فصولي ...) وفجأة نجحت فقط . أظن أنني كنت أنسى بعض الاتصالات في مكان ما ، على الرغم من أنني لم أتمكن من معرفة مكان.

سأقوم بنشر رمز حل العمل في إجابة على هذا المنشور ، في حال جاء شخص آخر يبحث عنه.

هل كانت مفيدة؟

المحلول

تشغيل هذا الرمز يحل المشكلة. أعتقد أنني يجب أن نسيت خطوة في مكان ما ، لذلك إذا كان لديك نفس المشكلة ، فتأكد من قيامك بكل هذه الأشياء:

var connection = GetUnOpenedSqlConnection();       // Any connection that inherits
                                                   // from DbConnection is fine.

var builder = new ContextBuilder<ObjectContext>(); // I actually had my own class
                                                   // that inherits from 
                                                   // ObjectContext, but that was 
                                                   // not the issue (I checked).

builder.Configurations.Add(EntryConfiguration);    // EntryConfiguration is the 
                                                   // class in the question

var context = builder.Create(connection);

if (context.DatabaseExists())
{ context.DeleteDatabase(); }

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