实体框架核心 - 调试映射

时间:2017-06-02 15:16:02

标签: c# entity-framework entity-framework-core

我有一个现有的数据库和一个现有的域,它最初是使用nHibernate创建和访问的,现在我将它移动到Entity Framework Core。

我开始尝试只访问域中的一个元素(不幸的是,它与许多其他实体紧密耦合)。该域名非常遗留和单一,不能作为本练习的一部分进行修改。

我遇到了很多类似的错误: "属性' DateTimeFormatInfo.AbbreviatedDayNames'无法映射,因为它的类型为' String []'它不是受支持的基本类型或有效的实体类型。要么显式映射此属性,要么使用' [NotMapped]'忽略它。属性或使用' EntityTypeBuilder.Ignore'在' OnModelCreating'。"

除了.NET类型映射之外,很难尝试确定映射失败的确切位置。是否有一种工具或方法可以轻松识别失败的部分。

我尝试过以下方法: - SQL Trace,没有在应用程序中失败。 - 异常只是给出了错误,没有内部异常或更多信息。 - 在整个解决方案中对具有类型为' DateTimeFormatInfo'的元素的实体进行了文本搜索。没有了。 - 在包含或使用属性/功能AbbreviatedDayNames的实体的整个解决方案中进行了文本搜索,也没有。

因此我试图确切地找到哪个实体映射失败。

此外,我还非常希望使用EF Fluent API进行任何映射。

2 个答案:

答案 0 :(得分:1)

您正在搜索错误的文字 DateTimeFormatInfo.AbbreviatedDayNames不是财产。 您应该尝试查找类型为'String []'的任何属性,因此请在Entites中搜索 错误本身就说明了问题所在。 EF无法将字符串数组映射到任何数据库类型。

答案 1 :(得分:0)

我遇到了与上面将应用程序迁移到Entity Framework核心时完全相同的错误

  

无法映射属性'DateTimeFormatInfo.AbbreviatedDayNames',因为它的类型为'String []',它不是受支持的基本类型或有效的实体类型。显式映射此属性,或使用'[NotMapped]'属性或在'OnModelCreating'中使用'EntityTypeBuilder.Ignore'忽略它。“

在我的情况下,问题与具有CultureInfo属性类型的实体有关。

System.Globalization.CultureInfo.DateTimeFormatDateTimeFormatInfo类型,并且是错误在我的案例中描述的属性。