2017-06-02 212 views
0

我有一个现有的数据库和现有的域,它最初是使用nHibernate创建和访问的,现在正在将它移动到实体框架核心。实体框架核心 - 调试映射

我已经开始尝试访问域的一个元素(不幸的是与很多其他实体紧密耦合)。这个域名是非常传统和单一的,不能作为这个练习的一部分进行修改。

我收到很多错误,类似于: “属性'DateTimeFormatInfo.AbbreviatedDayNames'无法映射,因为它的类型'String []'不是受支持的基元类型或有效的实体类型。要么显式映射此属性,要么使用'[NotMapped]'属性或'OnModelCreating'中的'EntityTypeBuilder.Ignore'忽略它。“除了.NET类型映射之外,很难尝试确定映射失败的位置。是否有工具或轻松识别故障部分的方法?

我试过以下内容: - SQL跟踪,没有什么,因为它在应用程序中失败。 - 异常只是给出了错误,没有内部异常或更多信息。 - 在整个解决方案中对包含“DateTimeFormatInfo”类型元素的实体进行文本搜索。没有了。 - 在包含或使用属性/函数AbbreviatedDayNames的实体的整个解决方案中进行了文本搜索,也没有任何结果。

因此,我坚持试图找到究竟哪个实体映射失败。

此外,我渴望使用EF Fluent API进行任何映射。

回答

1

您一直在搜寻错误的文章。
DateTimeFormatInfo.AbbreviatedDayNames不是物业。 您应该尝试查找任何类型为'String []'的属性,因此请在Entites中进行搜索。
而错误本身说明问题出在哪里。 EF无法将字符串数组映射到任何数据库类型。

+0

好吧所以有两个问题,如果它与DateTimeFormatInfo.AbbreviatedDayNames无关,为什么它在错误消息中提到它。该属性是一个字符串[],但为什么给这个名字?其次,是否有任何工具可以清晰地显示映射和映射验证问题? – user281921

+0

我不确定你为什么只用DayNames获得这些信息。 我用'String [] SomeArray'测试了实体并得到错误: “属性'Party.SomeArray'无法映射,因为它的类型'String []'不是受支持的基本类型或有效的实体类型,要么显式映射这个属性,要么忽略它。“ 所以在我的情况下,'SomeArray'是属性本身的名称。 你可能有一些具体的情况。 – borisdj

+0

这就是我想要知道的,AbbreviatedDayNames属性的确切位置,以及我的哪些实体。就像我说的我有很多,文本搜索没有找到这个属性。我意识到错误是在映射字符串[],但我很难找到它,因此请求一些工具或更简单的方法。 – user281921

0

我经历了完全相同的错误作为上述迁移应用程序到实体框架的核心,以及刚才

The property 'DateTimeFormatInfo.AbbreviatedDayNames' could not be mapped, because it is of type 'String[]' which is not a supported primitive type or a valid entity type. Either explicitly map this property, or ignore it using the '[NotMapped]' attribute or by using 'EntityTypeBuilder.Ignore' in 'OnModelCreating'."

在我的情况下,问题涉及到实体与CultureInfo属性类型。

System.Globalization.CultureInfo.DateTimeFormat是一个DateTimeFormatInfo类型,是我错误描述的属性。