2012-08-13 78 views
2

我相信你之前看到过这个问题。但是,至少在我的搜索中,每次询问这样的答案时:https://stackoverflow.com/a/4017148/219838都会弹出。答案是完全正确的,但不包括一种情况。如果你的数据库管理员选择使用tinyint列(根据他的位列不可转位)来代表布尔值,那么世界上什么都不会让他改变呢?在实体框架中将tinyint映射到布尔值

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

我在这里发现了一个丑陋的描述:http://www.saulovallory.com/how-to-map-byte-columns-to-bool-in-entityframework但它不是工作流畅的映射。现在我需要一个。

+0

@LukeMcGregor在我的问题中有一个链接到这个问题。我特别要求提供与在那里提供的解决方案不同的解决方案。 (其实答案根本没有提供解决问题的办法,只是对主题的解释) – svallory 2012-08-13 12:02:21

+0

我能够通过直接更新存储模型并将类型更改为布尔来将tinyint(1)映射为布尔值。例如:。 – sak 2012-08-13 12:32:47

+0

@svallory你有没有解决这个问题的方法?我从Telerik Open Access切换到EF Core,OpenAccess使用tinyint作为bool值。如果你找到了一个好的解决方案,会很高兴听到。 – marvstar 2017-11-14 08:25:09

回答

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 
     } 
} 
+0

这与我在博客上发布的解决方案完全相同,但使用了注释。我不喜欢在我的模型上有两个“相同”属性。我希望能够做到拦截保存,生成的SQL或提供某种“ValueTranslator”。 – svallory 2012-08-13 12:11:41