1

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

我会补充一点:

  • 我的项目的目标是 .NET 4.5(实际上功能和非功能模型在同一个项目中)。
  • 我正在使用实体框架 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; }
}

现在这是一个可以正常工作的版本,唯一的区别是它位于不同的命名空间和类文件中(两者都位于同一个项目中并且具有相同的 using 声明):

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; }
}

在“Buyer”表代码中,首先正确初始化 Commodity 列并将其映射到模型中的枚举。然而,在“供应商”表中,它仅使用以下列进行初始化:VendorID、VendorName 和 Visible,商品无处可寻。我的问题是为什么会发生这种情况,我该怎么做才能解决它?我对此束手无策。

编辑:似乎问题可能与使用两个具有相同名称的枚举有关。尽管编译器没有对歧义的抱怨(也不应该因为它们存在于不同的命名空间中),但似乎 EF 不喜欢它。更改枚举之一的名称会导致 CF 识别该属性。

4

0 回答 0