Dapper是否支持POCO中的C#6只读属性?

8

以下是给定的内容:

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字段?
2个回答

16

好问题!这不是我针对的场景,但我非常乐意看一下需要什么。由于我们已经进行了很多反射,所以这仍然是可行的。可能更适合作为一个Github问题,但我会看一下。

更新 - 现在可以了(目前只能通过存储库访问 - 尚未部署):

[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 项目上开了 #473 号问题。 - Matt Mills
@arootbeer 我已经修改了代码... 下一个版本将会包含修改。 - Marc Gravell
太棒了!谢谢你。 - Shyju

2

不行,因为如果该属性只有getter方法,Dapper无法设置该属性的值。


2
历史上它没有支持这个功能,仅仅是因为它没有被编码来支持它。然而 - 请看我的回答:现在它可以工作了。实际上,这并不是很难做到的。 - Marc Gravell
非常好的Marc!你是贡献者吗?如果是的话,我实际上编写了一个轻量级ORM,它是从Dapper扩展而来的。我希望你能看一下,并给我你的诚实意见,因为我正在努力提高自己作为软件工程师的水平。链接是https://www.github.com/RiceRiceBaby/ADOCRUD。谢谢! - RiceRiceBaby
我是主要的作者和维护者。我会尝试查看你的代码库。 - Marc Gravell
非常棒!Dapper的工作做得非常出色。我已经在许多Web应用程序中实现了它,并一直试图向其他开发人员推广它。它可以节省很多时间。继续保持良好的工作! - RiceRiceBaby

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