Caliburn.Micro + MEF + SQL CE вместе создают исключение. Не удается открыть 'Db \ Some.sdf'.Поставщик «System.Data.SqlServerCe.3.5» не установлен - PullRequest
0 голосов
/ 28 января 2011

Привет, я действительно запутался в этом поведении.Я использую Caliburn.Micro в качестве инфраструктуры MVVM в своем приложении WPF, MEF используется в классах моделей представления экспорта.

Теперь мне нужно использовать компактную базу данных SQL в моем приложении.Поэтому я создаю * dbml файл с помощью sqlmetal, потому что при доступе к БД я хотел бы использовать LINQ TO SQL.

Сначала я создаю простой класс, который выполняет операции CRUD с БД.

Вот оно:

public interface IDbManager{}

   [Export(typeof(IDbManager))]
    public class DbManager : IDbManager
    {
        //_dc is DataContext class
        private Spiri_SQL_CE_DB _dc;

        public DbManager()
        {
            //string connStr = System.Configuration.ConfigurationManager.AppSettings["connstr"];
            //_dc = new Spiri_SQL_CE_DB(connStr);

            _dc = new Spiri_SQL_CE_DB(@"Db\Spiri_SQL_CE_DB.sdf");
        }
    }

Этот класс используется в классе модели представления, который является окном WPF.

 [Export(typeof(IArchiveViewModel))]
    public class ArchiveViewModel :Screen,IArchiveViewModel
    {

        private IDbManager _dbManager;

        [ImportingConstructor]
        public ArchiveViewModel(IDbManager dbManager)
        {
            _dbManager = dbManager;
        }

    }

И это окно я открываю на экране с помощью класса WindowManager.

  [Export(typeof(IMessengerViewModel))]
    public class MessengerViewModel : Screen, IMessengerViewModel
    {

        private IWindowManager _windowManager;

        [ImportingConstructor]
        public MessengerViewModel(IWindowManager windowManager)
        {
            _windowManager = windowManager;
            OpenArchive();
        }

        public void OpenArchive()
        {
            var w =  IoC.Get<IArchiveViewModel>();
            _windowManager.ShowWindow(w);
        }

Если я запускаю приложение, я получаю эту ошибку:

The composition produced a single composition error. The root cause is provided below. Review the CompositionException.Errors property for more detailed information.

1) Cannot open 'Db\Spiri_SQL_CE_DB.sdf'. Provider 'System.Data.SqlServerCe.3.5' not installed.

Resulting in: An exception occurred while trying to create an instance of type 'Spirit.DbManager.DbManager'.

Resulting in: Cannot activate part 'Spirit.DbManager.DbManager'.
Element: Spirit.DbManager.DbManager -->  Spirit.DbManager.DbManager -->  AssemblyCatalog (Assembly="Spirit, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")

Resulting in: Cannot get export 'Spirit.DbManager.DbManager (ContractName="Spirit.DbManager.IDbManager")' from part 'Spirit.DbManager.DbManager'.
Element: Spirit.DbManager.DbManager (ContractName="Spirit.DbManager.IDbManager") -->  Spirit.DbManager.DbManager -->  AssemblyCatalog (Assembly="Spirit, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")


    }

Я действительнопутать с этой ошибкой:

1) Невозможно открыть 'Db \ Spiri_SQL_CE_DB.sdf'.Поставщик 'System.Data.SqlServerCe.3.5' не установлен.

Beacause:

  • Я использую Window 7 x64, я установил SQL Server CE для .NET4.0, .NET3.5
  • WPF использует .NET4.0 и является x86
  • В WPF у меня есть ссылка на сборку system.data.sqlserverce.dll

Я создаю небольшой проект репо, но получаю ту же ошибку:

Проект репо вы можете найти здесь: http://netload.in/dateiy4s4jdPyCj/DbTest.7z.htm

Мне кажется, код проблемы здесь:

_dc = new Spiri_SQL_CE_DB(@"Db\Spiri_SQL_CE_DB.sdf");

Класс Spiri_SQL_CE_DB из * .dbml файла.

Я создаю класс модели представления без MEF Я получаю ту же ошибку!

Поэтому я пытаюсь использовать класс DbManager в приложении WPF без Calibur.Micro и MEFи это работает хорошо.

Я действительно не знаю, что плохо, я ищу в Google 2 часа, но любой совет не решит эту ошибку.

Если кто-нибудь может помочь, я был быочень рад.

1 Ответ

2 голосов
/ 29 января 2011

Переустановите MSI 3.5 SP2, и, если у вас система x64, установите MSI x86 и x64: http://www.microsoft.com/downloads/en/details.aspx?familyid=E497988A-C93A-404C-B161-3A0B323DCE24&displaylang=en

...