首先,代码会忽略Entity Framework枚举属性

时间:2013-10-03 10:15:59

标签: c# enums entity-framework-5 .net-4.5 code-first

好的,问题是这个。我有多个使用枚举属性的模型,除了其中一个,我对此没有任何问题。在此模型中,代码首先不识别此属性,并且不会在相应的表中创建列。奇怪的是,我有一个非常相似的模型,非功能的模型工作正常,唯一的区别是它在不同的命名空间。

我要补充一点:

  • 我的项目针对的是.NET 4.5(实际上功能和非功能模型都在同一个项目中)。
  • 我正在使用Entity Framework 5
  • 我的枚举是在命名空间中公开定义的,不是嵌套在一个类中。

这样可以消除尝试在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识别该属性。

0 个答案:

没有答案