为什么 Entity Framework 5 code-first 不映射我的枚举 属性?
Why is Entity Framework 5 code-first not mapping my enum property?
我有一个 MVC3 项目使用 EF5 目标 ASP.NET 框架 4.5我正在更新一些额外的 classes。我的一个新 classes 有一个可为 null 的嵌套枚举 属性,它未映射到数据库。
public class MyProblemClass
{
public MyClass.MyEnum? MyPropertyName { get; set; }
}
以下是一些相关的细节:
- 运行
Add-Migration
生成的代码不包含此 属性。
- 我已经使用 基本 正确映射的枚举创建了其他新的 classes。
- 我还有其他现有 class 具有 嵌套 正确映射的枚举。
- 如果我在问题中放入 basic 枚举 class 它会正确映射。
- 如果我将问题枚举放在不同的 class 中,它在那里也不起作用。
基本枚举是指在 class:
之外定义的枚举
namespace My.Project.NewStuff
{
public enum MyEnum
{
Option1,
Option2
}
}
嵌套枚举是指在 class:
中定义的枚举
namespace My.Project.NewStuff
{
public static class MyClass
{
public enum MyEnum
{
Option1,
Option2
}
public static string MyExtensionMethod (this MyEnum option) {...}
}
}
新的枚举和 class 名称实际上与现有的工作名称相同,但在不同的命名空间中。新的选项略有不同,扩展方法中的代码也不同。
我尝试稍微重命名 class、enum 和 属性 以查看是否存在与使用相同名称相关的错误,但这没有帮助。
什么会阻止我的嵌套枚举 属性 映射到数据库?
解决方案:将枚举重命名为唯一的名称。 根据 this SO answer,Entity Framework 不支持多个 类 相同不合格的名称。这似乎包括枚举。
通常您会在 Add-Migration
步骤中收到类似于以下内容的错误:
Schema specified is not valid. Errors:
The mapping of CLR type to EDM type is ambiguous because multiple CLR types match the EDM type 'MyEnum'.
但是,如果冲突类型中的枚举数不相同,Add-Migration
不会显示此错误,而只是生成一个迁移,忽略映射冲突类型的任何属性。使冲突类型中的枚举数相同将再次显示错误。
我有一个 MVC3 项目使用 EF5 目标 ASP.NET 框架 4.5我正在更新一些额外的 classes。我的一个新 classes 有一个可为 null 的嵌套枚举 属性,它未映射到数据库。
public class MyProblemClass
{
public MyClass.MyEnum? MyPropertyName { get; set; }
}
以下是一些相关的细节:
- 运行
Add-Migration
生成的代码不包含此 属性。 - 我已经使用 基本 正确映射的枚举创建了其他新的 classes。
- 我还有其他现有 class 具有 嵌套 正确映射的枚举。
- 如果我在问题中放入 basic 枚举 class 它会正确映射。
- 如果我将问题枚举放在不同的 class 中,它在那里也不起作用。
基本枚举是指在 class:
之外定义的枚举namespace My.Project.NewStuff
{
public enum MyEnum
{
Option1,
Option2
}
}
嵌套枚举是指在 class:
中定义的枚举namespace My.Project.NewStuff
{
public static class MyClass
{
public enum MyEnum
{
Option1,
Option2
}
public static string MyExtensionMethod (this MyEnum option) {...}
}
}
新的枚举和 class 名称实际上与现有的工作名称相同,但在不同的命名空间中。新的选项略有不同,扩展方法中的代码也不同。
我尝试稍微重命名 class、enum 和 属性 以查看是否存在与使用相同名称相关的错误,但这没有帮助。
什么会阻止我的嵌套枚举 属性 映射到数据库?
解决方案:将枚举重命名为唯一的名称。 根据 this SO answer,Entity Framework 不支持多个 类 相同不合格的名称。这似乎包括枚举。
通常您会在 Add-Migration
步骤中收到类似于以下内容的错误:
Schema specified is not valid. Errors:
The mapping of CLR type to EDM type is ambiguous because multiple CLR types match the EDM type 'MyEnum'.
但是,如果冲突类型中的枚举数不相同,Add-Migration
不会显示此错误,而只是生成一个迁移,忽略映射冲突类型的任何属性。使冲突类型中的枚举数相同将再次显示错误。