gpt4 book ai didi

entity-framework - 使用 Entity Framework 4 在运行时打开 SQL CE 文件

转载 作者:行者123 更新时间:2023-12-04 08:31:21 24 4
gpt4 key购买 nike

我正在开始使用 Entity Framework 4,并且我正在创建一个演示应用程序作为学习练习。该应用程序是一个简单的文档生成器,它使用 SQL CE 存储。每个文档项目都有自己的 SQL CE 数据文件,用户打开其中一个文件来处理项目。

EDM 非常简单。文档项目由主题列表组成,每个主题都有标题、描述和零个或多个注释。因此,我的实体是包含标题和文本属性的主题,以及包含标题和文本属性的注释。从 Subject 到 Note 是一对多的关联。

我想知道如何打开 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
}

最佳答案

答案在这里。我简化了我的代码并在更简单的 EDM 模型 Disney Characters 上运行它。模型有两个实体,CharacterChildCharacterChild 之间有 1:* 关联。 child 是角色的 child ——非常简单的东西。我将演示编写为控制台应用程序,以使其尽可能简单。

Program.cs中的完整代码如下:

class Program
{
static void Main(string[] args)
{
/* See http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/8a89a728-6c8d-4734-98cb-11b196ba11fd */

// Configure an SQL CE connection string
var filePath = @"D:\Users\dcveeneman\Documents\Visual Studio 2010\Demos\SqlCeEf4Demo\SqlCeEf4Demo\DisneyChars.sdf";
var sqlCeConnectionString = string.Format("Data Source={0}", filePath);

// Create an EDM connection
var builder = new EntityConnectionStringBuilder();
builder.Metadata = "res://*/DisneyChars.csdl|res://*/DisneyChars.ssdl|res://*/DisneyChars.msl";
builder.Provider = "System.Data.SqlServerCe.3.5";
builder.ProviderConnectionString = sqlCeConnectionString;
var edmConnectionString = builder.ToString();
var edmConnection = new EntityConnection(edmConnectionString);

// Build and query an ObjectContext
using (var context = new DisneyCharsContainer(edmConnection))
{
var chars = context.Characters;
foreach(var character in chars)
{
Console.WriteLine("Character name: {0}", character.Name);
foreach(var child in character.Children)
{
Console.WriteLine("Child name: {0}", child.Name);
}
}
Console.ReadLine();
}
}
}

代码顶部的链接指向我用来编写代码的论坛主题。

这是演练:首先,创建一个数据库连接。因为我使用的是 SQL CE,所以我没有连接字符串生成器——连接字符串只是一条路径,所以我不需要它。然后,我使用 EntityConnectionStringBuilder 构建实体连接字符串,然后使用它构建 EntityConnection。最后,我将连接传递给 ObjectContext 的构造函数。然后我可以使用 ObjectContext 查询 EDM。

关于entity-framework - 使用 Entity Framework 4 在运行时打开 SQL CE 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2433934/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com