在运行时创建带有表的 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:我的情况与此类似。
在 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;
}