在运行时创建带有表的 SQL Server CE DataContext

本文关键字:SQL Server CE DataContext 运行时 创建 | 更新日期: 2023-09-27 18:33:18

我正在为Windows Phone 8构建一个需要本地数据库的库。以下是我对 LINQ-to-SQL 如何工作和创建数据库的理解:

  • DataContext对象是从相应的类创建的。
  • 调用 CreateDatabase() 方法时,它会从 DataContext 对象读取连接字符串和类型 Table 的成员。
  • 该方法在给定位置创建数据库,并创建与 DataContext 对象的成员对应的表。

现在,DataContext类必须是硬类型。当我正在构建一个库时,我不知道用户需要哪些表。显然,我不能使用硬键入DataContext.此外,在这种情况下不存在CreateTable()方法。如果我只是开始使用GetTable方法,我会得到Table does not exist错误。

问题是,如何在不使用硬类型DataContext的情况下创建表?

PS:我的情况与此类似。

在运行时创建带有表的 SQL Server CE DataContext

在 LINQ-to-SQL for Windows Phone 的方案中,无法在初始化后将表添加到DataContext。就我而言,解决方案是接受库用户的整个DataContext,如下所示:

首先,提供一个基类,用户可以从中派生。

public class DataContextBase : DataContext
{
    public DataContextBase(string connectionString) : base(connectionString)
    { }
    //Tables for library's internal workings.
    public Table<SyncTimeStamp> SyncTimeStamps;
}

然后,用户可以在配置库时传递派生类。库可以接受这是方法参数:

public async void ConfigureSQLCE<T>(T mainDataContext) where T : DataContextBase
{   
    //Do whatever with it. MainDB is a dynamic here!
    MainDB = mainDataContext;
}