【问题标题】:The property 'DepartmentID' cannot be configured as a navigation property无法将属性“DepartmentID”配置为导航属性
【发布时间】:2016-11-09 04:41:22
【问题描述】:

指定类

public class Designation
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Key]
    public int  id  { get; set; }

     [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [ForeignKey("DepartmentID")]
    public int DepartmentID { get; set; }



    public bool IsActive { get; set; }

    public string AddedBy { get; set; }

    public DateTime AddedDate { get; set; }
    public string UpdateBy { get; set; }

    public DateTime UpdateDate { get; set; }
    public virtual  Department Department { get; set; }
}

部门类

public class Department
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Key]
    public int DepartmentID { get; set; }
    public string DepartmentName { get; set; }

    public bool IsActive { get; set; }

    public string AddedBy { get; set; }

    public DateTime AddedDate { get; set; }
    public string UpdateBy { get; set; }

    public DateTime UpdateDate { get; set; }
    public virtual  ICollection<Designation> Designations { get; set; }
}

EmployeeInfo 类

public class EmployeeInfo
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Key]
    public int EmployeeID { get; set; }
    public int DepartmentID { get; set; }
    [ForeignKey("DepartmentID")]
    public virtual Department Department { get; set; }
    [Required(ErrorMessage = "Employee Name is Required"), Display(Name = "Name")]
    public string EmployeeName { get; set; }
    [Required(ErrorMessage = "Employee Bangla Name is Required"), Display(Name = "Bangla Name")]
    public string EmployeeBanglaName { get; set; }
    [Required(ErrorMessage = "Department Name is Required")]
    public string Department { get; set; }
    [Required(ErrorMessage = "Designation is Required")]
    public string Designation { get; set; }
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public DateTime JoiningDate{ get; set; }

    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public DateTime DateOfBirth { get; set; }
    [Required(ErrorMessage = "BloodGroup is Required"), Display(Name = "Blood Group")]
    public string BloodGroup { get; set; }
    [Required(ErrorMessage = "Gender is Required")]      
    public gender Gender { get; set; }   
    [Required(ErrorMessage = "Father Name is Required"), Display(Name = "Father Name")]
    public string FatherName { get; set; }
    [Required(ErrorMessage = "Mother Name is Required"), Display(Name = "Mother Name")]
    public string MotherName { get; set; }
    [Required(ErrorMessage = "Husband/Wife Name is Required"), Display(Name = "Spouse Name")]
    public string SpouseName { get; set; }
    public string ChildrenNumber { get; set; }
    public string CardNumber { get; set; }
    [Required(ErrorMessage = "Contact No is Required"), DataType(DataType.PhoneNumber)]
    public string ContactNo { get; set; }
    [Required(ErrorMessage = "Email is Required"), DataType(DataType.EmailAddress), StringLength(200)]
    public string Email { get; set; }

    [Required(ErrorMessage = "HomeContactNo is Required"),DataType(DataType.PhoneNumber)]
    public string HomeContactNo { get; set; }
    [Required(ErrorMessage = "District Name is Required")]
    public string District { get; set; }
    [Required(ErrorMessage = "Thana is Required")]
    public string Thana { get; set; }
    [Required(ErrorMessage = "Village Name is Required")]
    public string Vill { get; set; }
    [Required(ErrorMessage = "Post Code is Required")]
    public string PostCode { get; set; }
    public string Image { get; set; }
    public byte[] picture { get; set; }
    public bool IsActive { get; set; }

    public string AddedBy { get; set; }

    public DateTime AddedDate { get; set; }
    public string UpdateBy { get; set; }

    public DateTime UpdateDate { get; set; }
}

性别枚举

public enum gender
{
    Male,
    Female,enter code here
    Other
}

【问题讨论】:

  • 我想通过部门 ID 与三个模型/表建立外键关系,但错误显示如下>属性“部门 ID”不能配置为导航属性。该属性必须是有效的实体类型,并且该属性应该具有非抽象的 getter 和 setter。对于集合属性,该类型必须实现 ICollection 其中 T 是我的模型的有效实体类型
  • 你不应该在评论中写你的问题。请尝试编辑您的问题并在那里写下您的详细信息
  • public int DepartmentID { get; set; } 中删除[ForeignKey("DepartmentID")](如果需要,则需要将其应用于public virtual Department Department { get; set; } 属性(但不适用于您的情况)。您还需要删除[DatabaseGenerated(DatabaseGeneratedOption.Identity)]也来自它。

标签: c# asp.net-mvc entity-framework code-first foreign-key-relationship


【解决方案1】:

在您的 public virtual Department Department { get; set; } 属性上使用 [ForeignKey("DepartmentID")] 而不是 DepartmentID 属性。因此DepartmentID 将被识别为关联Department 的外键。

即使您不需要设置 ForeignKey 属性,因为您已将 DepartmentID 名称设置为与部门关联对象属性相同,默认约定 EF 将 DepartmentID 设置为外键。

看下面的代码,你会有一个清晰的画面。

public class Designation
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Key]
    public int  id  { get; set; }

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]

    public int DepartmentID { get; set; }

    public bool IsActive { get; set; }

    public string AddedBy { get; set; }

    public DateTime AddedDate { get; set; }
    public string UpdateBy { get; set; }

    public DateTime UpdateDate { get; set; }
    [ForeignKey("DepartmentID")]
    public virtual  Department Department { get; set; }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多