سؤال

أواجه مشكلة عند محاولة تشغيل مشروعي في كل مرة يبني فيها. يبدو أن التهيئة تعمل ، ولكن عندما يتعلق الأمر بالاستعلام الأول - يموت مع ما يلي InvalidOperationException.

This operation requires a connection to the 'master' database. Unable to create a
connection to the 'master' database because the original database connection has
been opened and credentials have been removed from the connection string. Supply
an unopened connection.

للرجوع إليها ، أنا أستخدم رمز EF First CTP4 ، الذي تم استيراده مباشرة مع Nuget. الاتصال بـ SQL Server 2008 R2

ما أريد أن يحدث هو إعادة إنشاء قاعدة البيانات إذا كان هناك أي تعديلات نموذجية وبذرة مع بعض القيم لجدول البحث. يبدو أن كلا من هذه الأشياء مدعومة* خارج الصندوق.

الإعداد الخاص بي مثل ذلك:

Global.asax

 protected void Application_Start()
 {
    Database.SetInitializer<CoreDB>(new CoreDBInitialiser());
    // et al...
 }

coredb.cs

public class CoreDB : DbContext
{
    public DbSet<User> Users { get; set; }
    public DbSet<Login> Logins { get; set; }
    public DbSet<Permission> Permissions { get; set; }
    public DbSet<Role> Roles { get; set; }
    public DbSet<RolePermission> RolePermissions { get; set; }
    public DbSet<UserRole> UserRoles { get; set; }
    public DbSet<Setting> Settings { get; set; }
}

public class CoreDBInitialiser : RecreateDatabaseIfModelChanges<CoreDB>
{
    protected override void Seed(CoreDB context)
    {
        var settings = new List<Setting>
        {
            new Setting
            {
                SettingName = "ExampleSetting",
                SettingValue = "This is a sample setting value",
            }
        };

        settings.ForEach(d => context.Settings.Add(d));
    }
}

عندما يتم تشغيله ، يموت على خط مشابه لهذا ، وهو في الأساس أول استعلام يظهر بعد إنشاء قاعدة البيانات.

User data = (from u in _data.Users where u.Username == userName  select u).SingleOrDefault();

أشياء لا أعتقد أنها:

  • إنها ليست أذونات: لقد قمت بحذف قاعدة البيانات الفعلية نفسها داخل خادم SQL. يقوم التطبيق بإعادة تنظيمه في نفس الوقت تقريبًا مثل هذا الاستعلام الذي تم محاولة تشغيله (يتم تعيين المُعزّد ، ثم يتوقف عن الإنشاء حتى يلزم الحاجة). لقد قمت أيضًا بتسجيل الدخول إلى SQL Server كمستخدم محدد في الويب الخاص بي. في الواقع ، ربما ينبغي عليهم فعل ذلك لأن هذا الحساب ينشئ قواعد البيانات أيضًا.
  • يتم إنشاء قاعدة البيانات: حذف ديسيبل ويعيد تلقائيًا.
  • يتم تعريف سلسلة الاتصال بشكل صحيح, ، بما في ذلك providerName ينسب.

<add name="CoreDB" connectionString="Data Source=localhost\SQLEXPRESS;Initial Catalog=TheDatabase;User Id=TheUsername;Password=ThePassword;" providerName="System.Data.SqlClient" />

  • لا يظهر أن أكون خطأ في الكود/المنطق الخاص بي ، كما فشل الاستعلام بنجاح ، سيبدأ الرمز بشكل صحيح حتى يتم إعادة بناء التطبيق في المرة القادمة. من الواضح أنه قد يكون ، ومن المحتمل أن أضطر إلى تطبيق عمل في الكود الخاص بي بغض النظر عن أي شيء على أي حال. قون

ماذا أفعل؟

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

أ عدد قليل من المنتدى / لذلك ، تعني المنشورات أن المشكلة التي أواجهها هي في الأساس لأن المهيئات لا تعمل تمامًا كما هو مخطط لها وقد يترك الاتصال مفتوحًا. يبدو أن الحل في أماكن أخرى هو ببساطة "لا تنشئ مُهيئتك الخاصة" ، وهذا ليس هو الحل الأعظم - ولكن ما لم يكن لدى أي شخص أي أفكار ، فربما يتعين علي القيام به حتى CTP5 ربما.

*نعم ، أعرف أنها CTP ، لذا فإن "المدعومة" ربما ليست الكلمة :)

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

المحلول

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

Trusted_Connection=False;Persist Security Info=True

مرتكز على هذه المقالة

نصائح أخرى

حسب الطلب ، أقوم بنشر تعليقي كإجابة.

كان حلي مشابهًا جدًا لـ Bizon حيث يحتاج Trusted_Connection و Info Security Information إلى تصحيح ، لكنني أنجزته من خلال خصائص Visual Studio من خلال الذهاب إلى:

مستكشف الخادم -> تعديل الاتصال -> متقدم -> ثم تحقق من كليهما استمر في معلومات الأمن و TrustServerCertificate كما هو صحيح ، وقام بتنسيق سلسلة الاتصال بشكل صحيح

screenshot of visual studio gui

فقط أواجه هذه المشكلة بينما أتابع هذه تحت VS2012 و EF6. حلي بسيط للغاية:

في مربع حوار خصائص الاتصال والذي يظهر عند اختيار "رمز الهندسة العكسية أولاً" ، تحقق من "حفظ كلمة المرور الخاصة بي".

تم حل المشكلة ، لكنني لا أعرف التفاصيل حول هذا الموضوع ...

أضف هذا إلى سلسلة الاتصال الخاصة بك. عملت معي.

Integrated Security=True;Persist Security Info=True;

لم أتمكن من جعل هذا العمل كما أردت. هذه الإجابة عبارة عن bodge / dopt-out ، لذا كن على دراية عند اتخاذ قرارك بشأن ما يجب القيام به.

لقد عدت بعيدًا عن الكود الأول في هذه الأثناء حتى يكون في إصدار أكثر استقرارًا. لأي شخص يعاني من هذه المشكلة مع CTP4 أيضًا ، يمكنك الالتفاف عليها عن طريق فقدان التهيئة الخاصة بك وتمريرها إلى SetInitializer طريقة.

Database.SetInitializer<CoreDB>(null);

هذا بالطبع يعني أنك تحتاج إلى الحفاظ على قاعدة البيانات الخاصة بك في كل مرة تقوم فيها بإجراء تغيير ، أو تغييرها لتشغيل واحد ثم تغييرها بعد أن تنشئ DB.

لم يتم نشرها من قبل ، تعليمة إطار عمل كيان باستخدام MVC ، باستخدام 2010 وخادم قاعدة بيانات DEV يعمل SQL Server 2005 لقاعدة البيانات. أنا أساسا رجل تطبيق Windows.

أصبح الجزء الأول من البرنامج التعليمي جيدًا ، حيث أنشأ الجداول الثلاثة حتى الآن ، ثم واجهت الخطأ أعلاه بعد إضافة المزيد من الفئات ونجمة قاعدة البيانات اللازمة للتغيير.

كان إصلاحي وحشيًا إلى حد ما ، وذهبت إلى خادم Dev ودخلت تسجيل الدخول الخاص بي وأنا sysadmin على الخادم الخاص بي ، وليس مفاجئًا. لذلك ذهبت إلى usermapping واختارت Master وحددت كل صندوق. إنه يعمل الآن.

لا أعرف لماذا نجح هذا أو ما هي المشكلة ، ولكن نأمل أن يكون شخص يعرف أكثر مني أن يبني على هذا "الإصلاح السيئ" ويجعله أفضل للآخرين الذين لديهم هذه القضية.

كان لدي كلمة المرور الخاطئة. استثناء صياغة غريب.

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