2014-12-05 84 views
1

我從NuGet安裝ShortGuid並希望將它用作我的表的關鍵。我想將22個字符的字符串存儲在數據庫中而不是Guid中,因此在調試時更容易找到記錄。我如何讓Entity Framework創建此列?ShortGuid與實體框架

我嘗試添加:

public ShortGuid NewCol { get; set; } 

但沒有加入列。我試過了:

[Column(TypeName = "nvarchar")] 
[MaxLength(22), MinLength(22), StringLength(22)] 
public ShortGuid NewCol { get; set; } 

但是還是沒有列。據推測,英孚不理解我在做什麼,只是忽略了專欄?

public Guid NewCol { get; set; } 

我想我可以只使用一個22字符的字符串列,但最好我想用ShortGuid類型:如果我只是用的Guid它工作正常。那可能嗎?

+0

這看起來相當偏離/「哈克」,所以你可以體驗到更好的調試體驗。這聽起來像你需要改進你的調試過程/工具。 – 2014-12-05 23:18:06

+0

爲什麼不在EF中使用GUID,只是在檢索它們時將它們轉換爲NewGuid的? – 2014-12-06 05:55:34

+0

@TheMuffinMan在發生錯誤時,您從未發現在挖掘數據庫時使用Guid會很痛苦嗎?不知道你是如何建議改進調試方法...但它也使得更短和更漂亮的網址。 – Sean 2014-12-06 05:56:22

回答

0

我都經歷過,在過去與實體框架類似的東西。據我所知,列的類型不能是一個複雜的類型。這是實體框架的限制(但我對此不是100%確定)。

我會分享我通常在這種情況下所做的事情,即使我知道我的答案更多的是解決問題的辦法而不是正確的答案。

我在我的課程中創建了兩個屬性:1)將作爲數據庫中的列的屬性和2)我最初打算保留在我的課程中的屬性。下面的代碼片段將解釋我正在嘗試做什麼。

Event.cs:

namespace MyContext.Model 
{ 
    public partial class Event 
    { 
     [Key] 
     public int EventId { get; set; } 

     public string AccessTokenStr { get; set; } 

     // [NotMapped] tells Entity Framework to not make a column for the following property 
     [NotMapped] 
     public ShortGuid AccessToken 
     { 
      get 
      { 
       return new ShortGuid(AccessTokenStr); 
      } 

      set 
      { 
       AccessTokenStr = value.ToString(); 
      } 
     } 
    } 
} 

希望這有助於。

+0

這可能是一個很好的解決方案。謝謝。 – Sean 2015-01-07 12:02:10

0

地圖它作爲一個複雜的類型,但你不能用它作爲主鍵

+0

我會研究複雜的類型,但是如果我不能用它作爲主鍵,它就會失敗。 – Sean 2014-12-06 06:01:49