我开始使用 Entity Framework 4,并创建一个演示应用程序作为学习练习。该应用程序是一个简单的文档生成器,它使用 SQL CE 存储。每个文档项目都有自己的 SQL CE 数据文件,用户打开其中一个文件来处理项目。
EDM 非常简单。一个文档项目由一个主题列表组成,每个主题都有一个标题、一个描述和零个或多个注释。因此,我的实体是包含 Title 和 Text 属性的 Subject 和具有 Title 和 Text 属性的 Note。从主题到注释存在一对多关联。
我想弄清楚如何打开 SQL CE 数据文件。数据文件必须与 EF4 的创建数据库向导创建的 SQL CE 数据库的架构相匹配,我将在应用程序的其他地方实现一个新文件用例来实现该要求。现在,我只是想在应用程序中打开现有的数据文件。
我在下面复制了我现有的“打开文件”代码。我已将其设置为名为File Services的静态服务类。该代码尚未完全正常工作,但足以显示我正在尝试做的事情。我试图保持 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
}