在运行时使用表创建SQL Server CE DataContext

时间:2013-09-29 19:47:59

标签: c# linq windows-phone-8 sql-server-ce

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

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

现在,DataContext类必须是硬类型。在构建库时,我不知道用户需要哪些表。显然,我不能使用硬打字DataContext。此外,CreateTable()方法在此方案中不存在。如果我只是开始使用GetTable方法,则会出现Table does not exist错误。

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

P.S。:我的情况与this类似。

1 个答案:

答案 0 :(得分:0)

在Windows Phone的LINQ-to-SQL场景中,初始化后无法将表添加到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;
}
相关问题