EntityFramework并将第三方类型写入DB

时间:2017-10-07 15:59:30

标签: c# entity-framework

我正在尝试使用entityframework将数据库写入数据库。

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

    public Type MyType {get;set;}
}

我的DbContext包含DbSet的MyClass,但当我尝试创建数据库时, 我得到了这个例外:

  

System.InvalidOperationException:'实体类型   'CustomAttributeData'需要定义主键。'

我猜是因为EF试图使用System.Type的内部结构。

有没有办法让EF将此字段(或我们无法更改的任何其他类)写入数据库?

1 个答案:

答案 0 :(得分:1)

为什么序列化类型本身?我认为存储它的全名应该足够了:

使用NotMapped属性忽略MyType属性并序列化类型名称而不是类型本身(MyType.FullName)并使用Type.GetType()创建它。

注意:对于复杂的自定义类型,可以找到一个优雅的解决方案here

[编辑] 由于Type实际上可能是自定义复杂类型,因此可能的解决方案是使用JsonConvert.SerializeObjectJsonConvert.DeserializeObject来获取可以是的常规字符串直接存储到数据库中。