在类型'y'中找不到键为'x'的关键成员'x'。

4
我正在尝试使用LINQ-to-SQL将我的应用程序连接到SQLite数据库,到目前为止一切都运行良好。唯一的问题是,我使用的SQLite提供程序不支持代码生成(除非我做错了什么),因此我手动编码了数据库中的4个表格。
解决方案可以正确构建,但无法运行,给我错误消息:
“在类型 'Item' 上找不到关键成员 'ItemType_Id' 的关键字 'ItemType_Id'。关键字可能错误,或者 'Item' 上的字段或属性已更改名称。”
我已经检查和反复检查了数据库和属性映射中的拼写和字段名称,但没有发现任何问题。
表格的SQL如下:
CREATE TABLE [Items] (
    [Id] integer PRIMARY KEY AUTOINCREMENT NOT NULL,
    [Name] text NOT NULL,
    [ItemType_Id] integer NOT NULL
);

我的映射代码如下:
[Table(Name="Items")]
class Item {

    // [snip]

    [Column(Name = "Id", IsPrimaryKey=true, IsDbGenerated=true)]
    public int Id {
        get;
        set;
    }

    // [snip]

    [Column(Name="ItemType_Id")]
    public int ItemTypeId {
        get;
        set;
    }

    [Association(Storage = "_itemType", ThisKey = "ItemType_Id")]
    public ItemType ItemType {
        get {
            return _itemType.Entity;
        }
        set {
            _itemType.Entity = value;
        }
    }
    private EntityRef<ItemType> _itemType;

    // [snip]
}

这真是我第一次涉足LINQ-to-SQL,我正在学习过程中,但似乎无法解决这个看似简单的问题。

为什么LINQ无法看到我的关联?

2个回答

4

Try using

ThisKey = "ItemTypeId"


确实,ThisKeyOtherKey应该包含在您的类中使用的名称,而不是数据库。 - Anthony Serdyukov

3
我也遇到了这个问题,我的解决方案是我不小心创建了一个与数据库中一张表同名的页面。将页面重命名后,问题立即得到解决。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接