我开始使用实体框架4,并创建演示应用程序作为学习练习。该应用程序是一个简单的文档生成器,它使用SQL CE存储。每个文档项目都有自己的SQL CE数据文件,用户可以打开其中一个文件来处理项目。使用实体框架在运行时打开SQL CE文件4
EDM非常简单。文档项目由一系列主题组成,每个主题都有一个标题,一个描述以及零个或多个注释。所以,我的实体是包含标题和文本属性的主题,以及具有标题和文本属性的注释。从主题到注释之间存在一对多关联。
我想弄清楚如何打开一个SQL CE数据文件。数据文件必须与由EF4的创建数据库向导创建的SQL CE数据库的模式相匹配,并且我将在应用程序的其他地方实施新文件用例来实现该要求。现在,我只是试图在应用程序中打开现有的数据文件。
我已经在下面复制了我现有的“打开文件”代码。我已将其设置为静态服务类,名为文件服务。代码还没有正常工作,但足以显示我正在尝试做什么。我试图保持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
}
你有没有实现新的文件用例? – pomeroy 2011-02-07 21:47:27