2017-10-07 85 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