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 具有属性 Category,它是 List<CategoriesItem> 我想我还必须将 CategoriesItem 添加为表格。

这样做之后,我得到了 PostsItems 上的 CreatedBy 属性的错误,它是一个 UserInformationListItem,现在这是它变得棘手的时候。

我还将 UserInformationListItem 添加到 CreateTables 函数中,这给了我当前的问题。

对象 UserInformationListItem 还包含一个 CreatedBy 属性,它也是一个 UserInformationListItem。

我正在寻找解决此问题的方法,而无需更改或重新创建这些对象的本地版本。

这些对象是在我无法编辑的 Sharepoint 上定义的,并且是通过 OData 服务引用获得的。如果需要更多信息来为我提供答案,请告诉我

4

1 回答 1

10

根据您的示例代码,我认为您正在使用sqlite-net

Sqlite-net 不是真正的 ORM - 它仅支持基本数据类型,不能将您的自定义类型作为属性处理。您可以在类 ( )的SqlType()静态方法中自行检查。OrmSQLite.cs

导致问题的不是自引用,而是类之间的任何引用。为以下两个类创建表也会失败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; }
}

您需要创建自己的“数据库”类,它们将一对一地映射到数据库表。要处理UserInformationListItem,您只需将其键值作为属性添加到PostItem. 如果PostItem并且CategoryItem具有多对多关系,则还需要添加交叉引用表。

于 2012-10-05T19:22:46.257 回答