【问题标题】:Why can't I have property of type Type in my model for Entity Framework?为什么我的实体框架模型中没有类型类型的属性?
【发布时间】:2016-08-06 13:43:57
【问题描述】:

我正在为一个项目建立一个模型,一切都按预期工作,除了下面的更改。我认为将类型指定为 Type 而不是将其描述为 string 会很好。

namespace DataBase.Entities
{
  public class Lock
  {
    public Guid Id { get; set; }
    public DateTime? Occasion { get; set; }
    public int Counter { get; set; }
    public Type Entity { get; set; }
    //public string Entity { get; set; }
  }
}

你猜怎么着! EF 一点也不喜欢它。然后添加显式迁移时出现的错误如下,我不知道为什么。

System.ArgumentNullException:值不能为空。
参数名称:entitySet

大多数 goolearching 导致 people 发现 POCO 类有一些他们忘记的继承。 Someone 建议强制重新启用迁移。我在模型中根本没有任何继承,并且强制迁移只提供了一个重新创建的配置文件。

【问题讨论】:

    标签: c# entity-framework ef-code-first poco ef-fluent-api


    【解决方案1】:

    我总是存储程序集限定的类型名称而不是类型本身。

    一个Type 实例,它不仅仅是一个名称,还有很多在运行时可能很有趣的元数据,但存储(即序列化)一个类型实例是没有意义的原样。

    当你设置整个Type 属性时,得到Type.AssemblyQualifiedName 属性值:

    instance.Type = typeof(X).AssemblyQualifiedName;
    

    应该适用于整个类型的代码可以调用Type.GetType(lock.Type) 再次构建Type 实例。

    【讨论】:

    • 我明白你的意思,我觉得这个建议很有动力。不过,我想知道为什么我不能存储类型 System.Type 的整个实例(不是为什么我不应该,而是为什么我可以't)。另外,我很想看看这个问题如何导致该错误消息的一些解释。
    • @konradviltersten 基本上 EF 是一个抽象关系数据库的 ORM。那么,如果 Type 是一个复杂类型,你如何期望 EF 存储一个 Type 实例而不序列化它呢? EF 是否默认使用不包括字符串的引用类型来执行此操作?
    • 好点,伙计。我指望 EF 使用反射来找出在我的上下文中的所有实体中的所有公共属性,或者它以一种或另一种方式提及。我想对自动操作的希望有点过分了。很好的解释。
    • @KonradViltersten 是的......归根结底,它是一个 OR/M。使用 NHibernate,您可以使用自定义类型来自定义类似的内容(在向实体写入数据或从实体读取数据时序列化/反序列化复杂类型)。顺便说一句,AFAIK,实体框架一直受到更多限制,您需要引入丑陋的代码或丑陋的变通方法才能使其正常工作...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多