Dapper 在从数据库执行 select 时正在访问我的 class 的所有属性,即使它不应该访问

Dapper is accessing all properties of my class when doing a select from the database even when it should not

我正在使用 jquery 数据 table 来显示 table 数据。 table 仅显示我的 SqlFunction 中的 3 列。

我是这样使用dapper的:

 IQueryable<MyClass> data = null;
 // Execute my sql statement and map the resultant fields into MyClass properties
 data = sqlCon.Query<MyClass>("SELECT field1, field2, field3, FROM dbo.MySqlFunction()", selector.Parameters).AsQueryable();

在上面的代码中“selector”是一个Dapper.SqlBuilder.

MyClass 有一个 属性:

public List<Address> MailingAddresses
{
    get
    {
        if (_MailingAddresses == null)
        {
            _MailingAddresses = new List<Address>();
        }
        if (_MailingAddresses.Count == 0)
        {
            Address temp = new Address();
            _MailingAddresses.Add(temp);
        }
        return _MailingAddresses;
    }
    set
    {
        _MailingAddresses = value;
    }
}

即使我的 sql 函数中只有 select 3 个字段,并告诉 dapper 将其映射到 MyClass 的 IQueryable,但执行 MailingAddresses get 访问器。我有从地址 class 中的缓存或数据库读取美国各州的代码,这就是我什至发现这种情况发生的方式。

我没有在第一页的任何地方访问 MailingAddresses 属性(该页面只列出了一个 table,其中包含来自 MyClass 的 3 个字段。)

我已将范围缩小到 Dapper 是罪魁祸首。我复制了我的 MyClass 并删除了 MailingAddresses 属性,它不再尝试 运行 从数据库中获取状态列表的代码。

我看到了各种防止 Dapper 访问 Insert/Update 上的属性的参考资料,但它们在 select 上不起作用。它们是 Dapper.Contrib 的 [Computed] 和 Dapper.Rainbow.

的 [IgnoreProperty(true)]

如何在执行 SQL Select 时阻止 Dapper 访问未引用的属性?

Stack Trace of Break Point on getter

编辑 Full Stack Trace

现在我认为它可能一点也不精致(这是一种解脱),但序列化为 json。有没有办法让序列化忽略属性?

以下是我如何 return 从控制器向我的视图发送数据:

   return Json(new { draw = draw, recordsFiltered = recordsFiltered, recordsTotal = recordsFiltered, data = recs });

这不是 Dapper 造成的,而是 JsonSerializer 访问 属性 造成的。

如果您将 [JsonIgnore] 属性添加到您的 属性,则 JsonSerializer

将无法访问它