2017-10-07 51 views
0

我正嘗試使用entityframework將類寫入數據庫。EntityFramework並將第三方類型寫入數據庫

public class MyClass 
{ 
    [Key] 
    public long ID {get; set;} 

    public Type MyType {get;set;} 
} 

DbContext包含MyClass的一個DbSet,但是當我嘗試創建數據庫,
我得到這個異常:

System.InvalidOperationException:「實體類型 '一個CustomAttributeData' 要求一個要定義的主鍵「。

我猜這是因爲EF試圖使用內部結構System.Type

有沒有辦法讓EF寫這個字段(或其他任何我們不能改變的類)到數據庫?

+1

但它應該如何序列化到數據庫?這是什麼樣的領域應該是在你的數據庫? – Pac0

+0

@ Pac0:二進制格式。 – Idov

+0

我可以問一下你的目標是什麼?你想要實現什麼功能? – Pac0

回答

1

爲什麼序列化類型本身?我認爲,存儲其全稱應該是足夠了:

忽略使用NotMapped屬性MyType財產和序列化的類型名稱,而不是類型本身(MyType.FullName),並創建回用Type.GetType()

注意:對於複雜的自定義類型,可以找到一個優雅的解決方案here

[編輯]由於Type實際上可以是定製複雜類型,可能的解決方案是使用JsonConvert.SerializeObjectJsonConvert.DeserializeObject以獲得能夠被直接存儲到數據庫中定期字符串。

+0

好的,但它不僅僅是屬性。會有其他「複雜」的屬性。 (順便說一句 - 類型不是那個對象的類型...其他東西) – Idov

+0

@Idov - 然後看看建議的解決方案,它基本上使用Json.NET來串行化和反序列化字符串表示的複雜對象。你還應該用'CustomType'或類似的東西來替換'Type'(又名System.Type),以避免混淆。 – Alexei