Привет, я действительно запутался в этом поведении.Я использую 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 часа, но любой совет не решит эту ошибку.
Если кто-нибудь может помочь, я был быочень рад.