Dapper 是否支持 POCO 中的 c#6 只读属性?
Does Dapper support c# 6 read-only properties in POCOs?
鉴于以下情况:
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
字段?
否,因为如果 属性 只有 getter,Dapper 无法设置 属性 的值。
好问题!这不是我所针对的场景,但我非常乐意了解其中涉及的内容。由于我们已经做了很多讨厌的反思,这仍然是可行的。作为 github 问题可能更好,但我会看看。
更新 - it does now(目前,仅通过回购 - 未部署):
[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";
}
鉴于以下情况:
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
字段?
否,因为如果 属性 只有 getter,Dapper 无法设置 属性 的值。
好问题!这不是我所针对的场景,但我非常乐意了解其中涉及的内容。由于我们已经做了很多讨厌的反思,这仍然是可行的。作为 github 问题可能更好,但我会看看。
更新 - it does now(目前,仅通过回购 - 未部署):
[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";
}