好的,问题是这个。我有多个使用枚举属性的模型,除了其中一个,我对此没有任何问题。在此模型中,代码首先不识别此属性,并且不会在相应的表中创建列。奇怪的是,我有一个非常相似的模型,非功能的模型工作正常,唯一的区别是它在不同的命名空间。
我要补充一点:
这样可以消除尝试在EF中使用枚举时出现问题的最常见原因。
以下是代码片段,首先是非工作代码:
public enum Commodities
{
Test1,
Test2,
Test3
}
[Table("Suppliers")]
public class Suppliers
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
[Required]
[MaxLength(7)]
[Display(Name = "Vendor ID")]
public string VendorID { get; set; }
[Required]
[Display(Name = "Supplier Name")]
public string SupplierName { get; set; }
public Commodities Commodity { get; set; }
public bool Visible { get; set; }
}
现在这里的工作正常,唯一的区别在于它位于不同的命名空间和类文件中(两者都位于同一个项目中且具有相同的使用声明):
public enum Commodities
{
Test4,
Test5,
Test6
}
[Table("Buyers")]
public class Buyer
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
[Display(Name = "Buyer ID")]
[Required]
public string BuyerID { get; set; }
[Display(Name = "Buyer Name")]
[Required]
public string Name { get; set; }
[Display(Name = "Windows Logon ID")]
public string WinUserID { get; set; }
[RegularExpression(@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$", ErrorMessage = "Please enter a valid e-mail adress")]
[DataType(DataType.EmailAddress)]
[Display(Name = "Email address")]
public string Email { get; set; }
public Commodities Commodity { get; set; }
[Display(Name = "Active?")]
public Boolean IsActive { get; set; }
}
在“买方”表格代码中,首先正确初始化商品列并将其映射到模型中的枚举。但是,在“供应商”表中,它仅使用以下列进行初始化:VendorID,VendorName和Visible with Commodity no where where found。我的问题是为什么会发生这种情况,我该怎么做才能解决这个问题?我的斗智尽头。
编辑:似乎问题可能与使用两个具有相同名称的枚举有关。虽然编译器没有关于歧义的抱怨(并且它不应该存在于不同的命名空间中),但似乎EF不喜欢它。更改其中一个枚举的名称会导致CF识别该属性。