0

ローカル データベースを必要とする Windows Phone 8 用のライブラリを構築しています。LINQ-to-SQL がどのように機能し、データベースを作成するかについての私の理解は次のとおりです。

  • DataContextオブジェクトは、対応するクラスから作成されます。
  • CreateDatabase() メソッドが呼び出されると、接続文字列と型のメンバーがTableDataContext オブジェクトから読み取られます。
  • このメソッドは、指定された場所にデータベースを作成し、DataContext オブジェクトのメンバーに対応するテーブルを作成します。

ここで、DataContextクラスをハード型指定する必要があります。ライブラリを構築しているので、ユーザーがどのテーブルを必要とするかわかりません。明らかに、ハード タイプの は使用できませんDataContext。さらに、CreateTable()このシナリオにはメソッドが存在しません。GetTableメソッドの使用を開始すると、Table does not existエラーが発生します。

問題は、ハードタイプを使用せずにテーブルを作成するにはどうすればよいDataContextですか?

PS: 私の状況はこれに似てます。

4

1 に答える 1

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;
}
于 2013-10-09T07:04:42.933 に答える