سؤال

أنا أستخدم Entity Framework 4 في تطبيق سطح المكتب مع SQL Compact. اريد استخدام أ التثبيت الخاص من SQL مضغوط مع طلبي ، بحيث يمكن للتثبيت الخاص بي تثبيت SQL Compact دون إعطاء المستخدم تثبيتًا ثانيًا للقيام به. كما أنه يتجنب الإصدار المتاعب أسفل الطريق.

يحتوي جهاز التطوير الخاص بي على SQL Compact 3.5 SP1 مثبتًا كتثبيت عام ، لذا فإن تطبيقي يعمل بشكل جيد هناك ، كما يتوقع المرء. لكنه لا يعمل على جهاز الاختبار الخاص بي ، والذي لا يتم تثبيت SQL Compact. أحصل على هذا الخطأ:

The specified store provider cannot be found in the configuration, or is not valid.

أعلم أن بعض الأشخاص واجهوا صعوبة في منشآت SQL Compact الخاصة ، ولكن لقد استخدمتها لفترة من الوقت, ، وأنا حقا أحبهم. لسوء الحظ ، فإن نهج التثبيت الخاص المنتظم الخاص بي لا يعمل. لقد راجعت أرقام الإصدار على ملفات SQL CE ، وهي كلها 3.8.8078.0 ، وهي إصدار SP2 RC.

فيما يلي الملفات التي قمت بتضمينها في التثبيت الخاص بي:

  • SQLCECOMPACT35.DLL
  • sqlceer35en.dll
  • SQLCEME35.DLL
  • sqlceqp35.dll
  • sqlcese35.dll
  • System.data.sqlserverce.dll
  • system.data.sqlserverce.entity.dll

لقد أضفت إشارة إلى System.data.sqlserverce إلى مشروعي ، وقد تحقق من أن جميع الملفات المذكورة أعلاه يتم نسخها إلى مجلد التطبيق على جهاز التثبيت.

فيما يلي الرمز الذي أستخدمه لتكوين entityConnectionStringBuilder عندما أفتح ملف SQL مدمج:

var sqlCompactConnectionString = string.Format("Data Source={0}", filePath);

// Set Builder properties
builder.Metadata = string.Format("res://*/{0}.csdl|res://*/{0}.ssdl|res://*/{0}.msl", edmName);
builder.Provider = "System.Data.SqlServerCe.3.5";
builder.ProviderConnectionString = sqlCompactConnectionString;
var edmConnectionString = builder.ToString();

هل أفتقد ملف؟ هل أفتقد تكوين السهوب اللازم لإخبار إطار الكيان بمكان العثور على DLLs المدمجة SQL؟ أي اقتراحات أخرى لماذا لا تجد EF DLLs SQL Compact على جهاز التثبيت؟ شكرا لمساعدتك.

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

المحلول

اكتشفت كيفية القيام بذلك ، بفضل أ منشور المدونة بقلم ستيف لاسكر. في الأساس ، إليك ما عليك فعله:

(1) تعيين إشارة إلى System.Data.SqlServerCe.dll في مشروعك. تعيين CopyLocal خاصية إلى صواب.

(2) في app.config لمشروعك ، أضف علامة XML التالية. يخبر EntityFramework أن تتطلع إلى تركيبك الخاص لـ SQL Compact لمزود البيانات الخاص به:

<system.data>
    <DbProviderFactories>
        <remove invariant="System.Data.SqlServerCe.3.5"/>
        <add name="Microsoft SQL Server Compact Data Provider" invariant="System.Data.SqlServerCe.3.5" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=3.5.1.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
    </DbProviderFactories>
</system.data>

(3) في مشروع الإعداد ، أضف الملفات التالية إلى مجلد التطبيق في محرر نظام الملفات:

  • SQLCECOMPACT35.DLL
  • SQLCEME35.DLL
  • sqlcese35.dll
  • system.data.sqlserverce.entity.dll

نصائح أخرى

فقط للسجل ، مع SQL CE 4 إدخالات web.config هي ما يلي:

  <system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.SqlServerCe.4.0" />
      <add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    </DbProviderFactories>
  </system.data>

الإصدار =4.0.0.1 في حالة النشر الخاص والنسخة =4.0.0.0 في حالة النشر العام.

شكرا على نصيحتك - ساعدني كثيرًا. هناك انشر على مدونة SQL Server Compact-Team التي تضيف بعض المعلومات الإضافية لإصدار SQL Server Compact 3.5 SP2.

بعد الكفاح لفترة من الوقت مع النشر الخاص لخادم SQL Compact ، اكتشفت بعض المتطلبات الإضافية.

جربت تطبيقي على عدة أنظمة مختلفة واعترفت بأن تطبيقي لم يعمل بشكل صحيح على بعضها.

مثال: جرب هذا:

-لقد قمت بإعداد تثبيت WinXP SP3 نظيف

-تم تثبيت .NET Framework 4.0

-قم بتطبيق تطبيقي على التثبيت الجديد (بما في ذلك جميع DLL الضرورية والتحديد الموضحة في منشورات Team Server Compact Server الخاصة بك)

لذلك ، بعد بعض الأبحاث ، اكتشفت أنه بالإضافة إلى تثبيت .NET Framework 4 ، اضطررت إلى تثبيت .NET Framework 2 أيضًا وقد عملت بشكل جيد.

إذن هذا هو سؤالي: أي مكون يستخدمه إصدار SQL Server Compact الذي لم يكن موجودًا في .NET Framework 4؟

لا أريد تحميل الإعداد الخاص بي وسلسلة اثنين من الأطر على bootstrapper ... هل يعرف أي شخص أي نصيحة جيدة؟

شكرا جزيلا لفريق SQL Server Compact!

يعتمد SQL Server Compact V3.5 على "Visual C ++ Runtime 2005 (أو 8.0)" (المعروف أيضًا باسم CRT80). نقوم بتعبئة وحدات CRT80 في MSI لدينا. في حالة النشر الخاص ،

تحتاج إلى الاعتناء بهذه التبعية. تعمل الأمور مع .NET FX V2.0 على النظام تلقائيًا لأن .NET FX V2.0 أيضًا حزم وتثبيت وحدات CRT80.

شكرًا

هذا ما نجح بالنسبة لي:

لديك ملف machine.config لإصدارات dotnet 2.0 و 4.0:

dotnet 2.0

C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config
dotnet 4.0
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config

إذا قمت بفتح الملف للإصدار 2.0 ، فسترى أنه يحتوي على ملفu003Csystem.data> العقدة ، والتي ربما تبدو مثل هذا:

<system.data>
    <DbProviderFactories>
        <add name="Odbc Data Provider" ... stuff here ... />
        <add name="OracleClient Data Provider" ... stuff here ...>
        ... more lines similar to the one above ...
        <add name="Microsoft SQL Server Compact Data Provider" Invariant="System.Data.SqlServerCe.3.5" ...>
    </DbProviderFactories>
</system.data>

بينما ، إذا فتحت واحدة من أجل dotnet 4.0 ، فإنها تبدو أكثر فأسيًا مثل:

<system.data>
    <DbProviderFactories>        
    </DbProviderFactories>
</system.data>

أو ربما ليس لديها حتىu003Csystem.data> عقدة على الإطلاق !!! في كلتا الحالتين ، ببساطة نسخu003Csystem.data> العقدة في مجملها من ملف machine.config لـ V2 إلى واحد لـ V4.

ملاحظة جانبية

إذا كنت تواجه مشكلة في حفظ تحرير جهاز V4.

التعثر مع نفس المشكلة ،

"لا يمكن العثور على مزود المتجر المحدد في التكوين أو غير صالح."

جئت حول هذا المنصب. حاولت كل شيء تقريبًا. لقد قمت بتثبيت "system.data.sqlserverce"باستخدام nugets.

لذلك كان لدي بالفعل سطر التعليمات البرمجية المضافة في الويب الخاص بي. config

<DbProviderFactories>
  <remove invariant="System.Data.SqlServerCe.4.0" />
  <add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe" />
  <!--<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />-->
  <!--<add name="Microsoft EntityClient" invariant="System.Data.EntityClient.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.EntityClient, System.Data.EntityClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />-->
</DbProviderFactories>

لا يزال الخطأ استمر ..

لقد تخلصت من المشكلة عن طريق إلغاء تحديد الخطين الأخيرين المعلقين في الكود أعلاه ... لذلك يصبح الآن

<DbProviderFactories>
  <remove invariant="System.Data.SqlServerCe.4.0" />
  <add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe" />
  <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
  <add name="Microsoft EntityClient" invariant="System.Data.EntityClient.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.EntityClient, System.Data.EntityClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
</DbProviderFactories>

أتمنى أن يساعد .. شكرا.

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