3

次のコード:

oc.CreateTablesAsync(typeof(ODataService.UserInformationListItem), typeof(ODataService.CategoriesItem), typeof(ODataService.PostsItem));

私にこの例外を与えます:

System.NotSupportedException: Don't know about ODataApp.ODataService.UserInformationListItem

最初は、保存する必要があるオブジェクトである PostsItems のテーブルを作成していましたが、上記の例外が発生しましたが、ODataApp.ODataService.CategoriesItem.

PostItem には List<CategoriesItem> であるプロパティ Category があるため、CategoriesItem もテーブルとして追加する必要があると考えました。

その後、PostsItems の CreatedBy プロパティ (UserInformationListItem である) でエラーが発生しました。

また、現在の問題を引き起こした CreateTables 関数に UserInformationListItem を追加しました。

オブジェクト UserInformationListItem には、同じく UserInformationListItem である CreatedBy プロパティも含まれています。

これらのオブジェクトのローカル バージョンを変更または再作成することなく、これを回避する方法を探しています。

これらのオブジェクトは、編集できない SharePoint で定義されており、OData サービス参照によって取得されます。回答を提供するためにさらに情報が必要な場合は、お知らせください

4

1 に答える 1

10

サンプルコードに基づいて、sqlite-netを使用していると思います。

Sqlite-net は実際の ORM ではありません。基本的なデータ型しかサポートしておらず、カスタム型をプロパティとして扱うことはできません。クラス( )SqlType()の静的メソッドで自分で確認できます。OrmSQLite.cs

問題を引き起こしているのは自己参照ではなく、クラス間の参照です。次の 2 つのクラスのテーブルの作成も失敗しますNotSupportedException

public class CategoryItem
{
    public int Id { get; set; }
    public string Title { get; set; }
}

public class PostItem
{
    public int Id { get; set; }
    public string Label { get; set; }
    public List<CategoryItem> Categories { get; set; }
}

データベース テーブルに 1 対 1 でマップする独自の「データベース」クラスを作成する必要があります。処理UserInformationListItemするには、そのキー値をプロパティとして に追加するだけですPostItemPostItemとが多対多の関係にある場合CategoryItemは、相互参照テーブルも追加する必要があります。

于 2012-10-05T19:22:46.257 に答える