Dapper - Sql 到 Object 从字符串到 int 的隐式转换

发布于 2024-11-29 19:50:30 字数 87 浏览 0 评论 0原文

我正在使用 dapper,并且在将字符串值从 db 转换为 int 时遇到问题。有没有人重写 TypeMap 来实现这一点?

任何建议都会很棒。

I'm using dapper and am having issues with casting a string value from the db to an int. Has anyone overriden the TypeMap to allow for this?

Any suggestions would be great.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

请持续率性 2024-12-06 19:50:30

Dapper 对它映射的类型很挑剔。这可以保护您免受以后出现的各种令人讨厌的错误的影响。

例如,您的数据库可能返回:

  • 010hello
  • 10a10
  • 374837483748374837483748374834784378437438743874384738473

没有明确的操作过程将此类内容映射到Int32

也就是说,您可以使用 dapper 遵循两种不需要更改 IL 生成的策略。

选项 1:影子属性

class Foo
{
   public int Age 
   { 
      get 
      { 
       int age; 
       int.TryParse(ageString, out age); 
       return age;  
      } 
   }
   string ageString;
}

\\ usage
cnn.Query<Foo>("select ageString from TableWithString");

选项 2,在 SQL 中进行转换

cnn.Query<Bar>("select cast(ageString as int) Age from TableWithString");

没有干净的方法来扩展 Dapper 中的映射功能,如果这样做,您将需要将我们随时间添加的任何修复程序合并到本地副本。

Dapper is picky about the types it maps. This protects you from all sorts of nasty errors that pop up later.

For example, your db could return:

  • 010hello
  • 10a10
  • 374837483748374837483748374834784378437438743874384738473

There is no clear course of action for mapping this kind of stuff to an Int32

That said, there are two strategies you can follow with dapper that do not require changes to IL generation.

Option 1: Shadow property

class Foo
{
   public int Age 
   { 
      get 
      { 
       int age; 
       int.TryParse(ageString, out age); 
       return age;  
      } 
   }
   string ageString;
}

\\ usage
cnn.Query<Foo>("select ageString from TableWithString");

Option 2, cast in SQL

cnn.Query<Bar>("select cast(ageString as int) Age from TableWithString");

There is no clean way to extend the mapping functionality in Dapper, if you do so you will be stuck needing to merge any fixes we add over time to your local copy.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文