我正在尝试使用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将此字段(或我们无法更改的任何其他类)写入数据库?
答案 0 :(得分:1)
为什么序列化类型本身?我认为存储它的全名应该足够了:
使用NotMapped属性忽略MyType
属性并序列化类型名称而不是类型本身(MyType.FullName
)并使用Type.GetType()
创建它。
注意:对于复杂的自定义类型,可以找到一个优雅的解决方案here。
[编辑] 由于Type
实际上可能是自定义复杂类型,因此可能的解决方案是使用JsonConvert.SerializeObject和JsonConvert.DeserializeObject来获取可以是的常规字符串直接存储到数据库中。