2012-08-13 43 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