gpt4 book ai didi

小巧玲珑.Net : table column and model property type mismatch

转载 作者:行者123 更新时间:2023-12-02 04:58:22 26 4
gpt4 key购买 nike

实际上我有一个查询,它返回的结果包含 varchar 类型的列(对于 ex.Address),但是该表的域模型包含对象类型的属性(对于 ex.Address 地址)。因为它会出现错误,它说无法将字符串转换为 Comment。我不知道如何使用 dapper .net 解决此问题。

代码片段:

IEnumerable<Account> resultList = conn.Query<Account>(@"
SELECT *
FROM Account
WHERE shopId = @ShopId",
new { ShopId = shopId });

例如 Account 对象。

public class Account {
public int? Id {get;set;}
public string Name {get;set;}
public Address Address {get;set;}
public string Country {get;set;}
public int ShopId {get; set;}
}

由于数据库表列(地址)和域模型属性(地址)之间存在类型不匹配,dapper 会抛出异常。所以有什么方法可以通过 dapper 映射该属性..

最佳答案

另一种选择是使用 Dapper 的 Multi-Mapping功能。

public class TheAccount
{
public int? Id { get; set; }
public string Name { get; set; }
public Address Address { get; set; }
public string Country { get; set; }
public int ShopId { get; set; }
}

public class Address
{
public string Street { get; set; }
public string City { get; set; }
}

public class Class1
{
[Test]
public void MultiMappingTest()
{
var conn =
new SqlConnection(
@"Data Source=.\SQLEXPRESS; Integrated Security=true; Initial Catalog=MyDb");
conn.Open();

const string sql = "select Id = 1, Name = 'John Doe', Country = 'USA', ShopId = 99, " +
" Street = '123 Elm Street', City = 'Gotham'";

var result = conn.Query<TheAccount, Address, TheAccount>(sql,
(account, address) =>
{
account.Address = address;
return account;
}, splitOn: "Street").First();

Assert.That(result.Address.Street, Is.Not.Null);
Assert.That(result.Country, Is.Not.Null);
Assert.That(result.Name, Is.Not.Null);
}
}

我看到的唯一问题是您必须列出所有帐户字段,然后在您的选择语句中列出地址字段,以允许 splitOn 工作。

关于小巧玲珑.Net : table column and model property type mismatch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17562373/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com