You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Observable属性搭配NotMapped特性失效问题求助

解决SQLKata忽略NotMapped/Ignore注解导致的列不存在错误

你的问题核心在于SQLKata默认不识别Entity Framework的NotMapped特性,再加上ObservableProperty生成的公共属性可能没正确继承字段上的忽略注解,导致这些字段被纳入数据库操作,触发列不存在的错误。以下是几种可行的解决方法:

1. 给生成的属性明确添加SQLKata支持的注解

CommunityToolkit.Mvvm的ObservableProperty可以通过[property: ...]语法,把注解直接应用到生成的公共属性上。如果用的是SQLKata.Execution,优先使用它自带的[Ignore]特性(注意命名空间为SQLKata.Attributes):

using SQLKata.Attributes;
using CommunityToolkit.Mvvm.ComponentModel;

[ObservableProperty]
[property: Ignore]
private long time;

[ObservableProperty]
[property: Ignore, Key]
private int id;

[ObservableProperty]
private string family;

[ObservableProperty]
private string model;

[ObservableProperty]
private string status;

[ObservableProperty]
private bool isLocked;

[ObservableProperty]
[property: Ignore]
private string timeTracker;

[ObservableProperty]
private int count;

2. 手动排除字段(最直接的方式)

在构建SQLKata的插入/更新查询时,手动指定要操作的字段,或者排除不需要的字段:

方式一:显式指定字段

// 插入示例
var insertQuery = db.Query("YourTableName")
    .Insert(new {
        Family = yourObject.Family,
        Model = yourObject.Model,
        Status = yourObject.Status,
        IsLocked = yourObject.IsLocked,
        Count = yourObject.Count
    });

// 更新示例
var updateQuery = db.Query("YourTableName")
    .Where("Id", yourObject.Id)
    .Update(new {
        Family = yourObject.Family,
        Model = yourObject.Model,
        Status = yourObject.Status,
        IsLocked = yourObject.IsLocked,
        Count = yourObject.Count
    });

方式二:通过字典过滤字段

// 将对象转为字典后排除指定字段
var objectData = yourObject.ToDictionary();
var filteredData = objectData
    .Where(kv => !new[] { "Time", "Id", "TimeTracker" }.Contains(kv.Key))
    .ToDictionary(kv => kv.Key, kv => kv.Value);

// 执行插入
db.Query("YourTableName").Insert(filteredData);

3. 验证注解是否被正确继承

如果问题依然存在,检查ObservableProperty生成的属性是否真的带上了忽略注解。可以通过反编译工具查看生成的代码,确保Time、TimeTracker等属性上有[Ignore]或[NotMapped]标记。

内容的提问来源于stack exchange,提问作者Tom Stewart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 17:01:09