【问题标题】:Mapping tinyint to boolean in Entity Framework在实体框架中将 tinyint 映射到布尔值
【发布时间】:2012-08-13 06:33:26
【问题描述】:

我确定您以前看过这个问题。但是,至少在我的搜索中,每次被问到这样的答案时:https://stackoverflow.com/a/4017148/219838 会弹出。答案是完全正确的,但不涵盖一种情况。如果您的 DBA 选择使用 tinyint 列(根据他的说法,位列不可索引)来表示布尔值,而世界上没有什么能让他改变这一点怎么办?

我了解布尔值和字节值之间的区别。但我不在乎!我需要知道的是:是否有任何解决方法可以将 tinyint 列映射到布尔值而不是字节?

我在这里找到了一个丑陋的描述:http://www.saulovallory.com/how-to-map-byte-columns-to-bool-in-entityframework,但它适用于流畅的映射。现在我需要一个可以做到的。

【问题讨论】:

  • @LukeMcGregor 我的问题中有一个指向该问题的链接。我特别要求提供与那里提供的解决方案不同的解决方案。 (实际上那里的答案根本没有提供问题的解决方案,只是对主题的解释)
  • 通过直接更新存储模型并将类型更改为布尔值,我能够将 tinyint(1) 映射到布尔值。例如:
  • @svallory 你有什么解决办法吗?我正在从 Telerik Open Access 切换到 EF Core,而 OpenAccess 正在使用 tinyint 作为布尔值。如果您找到了一个好的解决方案,将会很高兴。
  • 对不起@marvstar 自从我从事这个工作以来已经很长时间了。我不记得是否曾经绕过它:/

标签: .net entity-framework


【解决方案1】:

EF 没有在 nHibernate 中构建它像 IUserType 这样的自定义类型转换器。可能的解决方法是将列映射到具有byte 类型的匹配属性,并具有另一个具有转换逻辑的bool 属性。因为这不是映射属性,所以您将无法在 LINQ 查询中使用它。

public class MyClass
{
    public byte DatabaseColumnName { get; set; }

    [NotMapped]
    public bool DomainPropertyName 
    { 
       get
       {
            //conversion logic using DatabaseColumnName 
       }
       set
       {
           //conversion logic using DatabaseColumnName 
       }
}

【讨论】:

  • 这与我在博客上发布的解决方案完全相同,但使用了注释。我不喜欢我的模型上有两个“相同”的属性。我希望能够做一些事情,比如拦截保存、生成的 SQL 或提供某种“ValueTranslator”。
猜你喜欢
  • 2011-04-30
  • 1970-01-01
  • 1970-01-01
  • 2013-10-14
  • 2019-01-12
  • 2011-12-23
  • 1970-01-01
  • 1970-01-01
  • 2015-08-17
相关资源
最近更新 更多