【问题标题】:Does Dapper support c# 6 read-only properties in POCOs?Dapper 是否支持 POCO 中的 c# 6 只读属性?
【发布时间】:2016-02-25 17:40:56
【问题描述】:

鉴于以下情况:

public class SomePoco {
    public int IntValue { get; }
}

CREATE TABLE SomePocoStorage (IntValue INT NOT NULL)

INSERT SomePocoStorage VALUES (1), (274)

如果我打电话

connection.Query<SomePoco>("SELECT * FROM SomePocoStorage")

Dapper 是否处理在返回的 SomePoco 实例上填充 IntValue 字段?

【问题讨论】:

    标签: dapper c#-6.0


    【解决方案1】:

    好问题!这不是我所针对的场景,但我很乐意看看会涉及什么。由于我们已经做了很多令人讨厌的反思,这仍然是可行的。作为github问题可能更好,但我会看看。

    更新 - it does now(目前,仅通过 repo - 未部署):

    [Fact] // passes
    public void GetOnlyProperties()
    {
        var obj = connection.QuerySingle<HazGetOnly>(
            "select 42 as [Id], 'def' as [Name];");
        obj.Id.IsEqualTo(42);
        obj.Name.IsEqualTo("def");
    }
    class HazGetOnly
    {
        public int Id { get; }
        public string Name { get; } = "abc";
    }
    

    【讨论】:

    • 我在 GitHub 项目上打开了 issue #473。
    • @arootbeer 我已经更改了代码...将在下一个版本中
    • 这太棒了!谢谢。
    【解决方案2】:

    否,因为如果该属性只有一个 getter,Dapper 就无法设置该属性的值。

    【讨论】:

    • 历史上没有,只是因为它没有被编码来支持它。但是 - 请参阅我的回答:它现在可以工作了。这实际上并不难做到。
    • 非常好的马克!你是一个贡献者吗?如果你是,我实际上写了一个从 Dapper 扩展而来的轻量级 ORM。当我正在努力提高自己作为一名软件工程师的能力时,我希望你能看看它并给出你的诚实意见。链接是github.com/RiceRiceBaby/ADOCRUD。谢谢!
    • 我是主要作者和维护者。我会试着看看你的回购。
    • 非常酷! Dapper 的出色工作。我已经在我从事的许多网络应用程序中实现了它,并且一直试图将它推广给我的其他开发者朋友。它节省了很多时间。继续努力!
    猜你喜欢
    • 1970-01-01
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    相关资源
    最近更新 更多