Я начинаю работать с Entity Framework 4 и создаю демонстрационное приложение в качестве учебного упражнения. Приложение представляет собой простой конструктор документации и использует хранилище SQL CE. Каждый проект документации имеет свой собственный файл данных SQL CE, и пользователь открывает один из этих файлов для работы над проектом.
EDM очень прост. Проект документации состоит из списка предметов, каждый из которых имеет заголовок, описание и ноль или более примечаний. Итак, мои объекты - это Subject, который содержит свойства Title и Text, и Note, который имеет свойства Title и Text. Существует связь «один-ко-многим» от предмета к примечанию.
Я пытаюсь выяснить, как открыть файл данных SQL CE. Файл данных должен соответствовать схеме базы данных SQL CE, созданной мастером создания базы данных EF4, и я реализую вариант использования нового файла в другом месте приложения, чтобы реализовать это требование. Сейчас я просто пытаюсь открыть существующий файл данных в приложении.
Я воспроизвел свой существующий код «Открыть файл» ниже. Я настроил его как статический класс обслуживания с именем Файловые службы . Код пока не работает, но этого достаточно, чтобы показать, что я пытаюсь сделать. Я пытаюсь держать ObjectContext открытым для обновлений объекта сущности, удаляя его, когда файл закрыт.
Итак, вот мой вопрос: я на правильном пути? Что мне нужно изменить, чтобы этот код работал с EF4? Есть ли пример того, как это сделать правильно?
Спасибо за вашу помощь.
Мой существующий код:
public static class FileServices
{
#region Private Fields
// Member variables
private static EntityConnection m_EntityConnection;
private static ObjectContext m_ObjectContext;
#endregion
#region Service Methods
/// <summary>
/// Opens an SQL CE database file.
/// </summary>
/// <param name="filePath">The path to the SQL CE file to open.</param>
/// <param name="viewModel">The main window view model.</param>
public static void OpenSqlCeFile(string filePath, MainWindowViewModel viewModel)
{
// Configure an SQL CE connection string
var sqlCeConnectionString = string.Format("Data Source={0}", filePath);
// Configure an EDM connection string
var builder = new EntityConnectionStringBuilder();
builder.Metadata = "res://*/EF4Model.csdl|res://*/EF4Model.ssdl|res://*/EF4Model.msl";
builder.Provider = "System.Data.SqlServerCe";
builder.ProviderConnectionString = sqlCeConnectionString;
var entityConnectionString = builder.ToString();
// Connect to the model
m_EntityConnection = new EntityConnection(entityConnectionString);
m_EntityConnection.Open();
// Create an object context
m_ObjectContext = new Model1Container();
// Get all Subject data
IQueryable<Subject> subjects = from s in Subjects orderby s.Title select s;
// Set view model data property
viewModel.Subjects = new ObservableCollection<Subject>(subjects);
}
/// <summary>
/// Closes an SQL CE database file.
/// </summary>
public static void CloseSqlCeFile()
{
m_EntityConnection.Close();
m_ObjectContext.Dispose();
}
#endregion
}