实体(表)通过实体框架代码优先

时间:2020-06-27 23:01:43

标签: asp.net .net entity-framework ef-code-first

我有一个简单的HR System数据库,其中包含2个表,用户拥有这些数据

ID(Primary key) ,
 FirstName , 
LastName , Email ,
 Password ,
 JobTitle ,
 CreatedAccount ,
 ManagerID ,
UserType(enum either employee or manager)

ManagerID是通过该关系指向Users表的外键

each employee has just one manager, and manager may have many employees 

我如何使用Code First方法在Entity Framework中执行此操作

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace HRSystem
{
    public class User
    {
        [Key]
        public int ID { get; set; }

        [RegularExpression(@"^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$", ErrorMessage = "Email is not valid.")]
        public string Email { get; set; }

        [DataType(DataType.PhoneNumber)]
        [RegularExpression(@"^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$", ErrorMessage = "Not a valid phone number")]
        public string PhoneNumber { get; set; }

        [DataType("VARCHAR")]
        [StringLength(100)]
        public string FullName { get; set; }

        [DataType("VARCHAR")]
        [StringLength(100)]
        public string JobTitle { get; set; }
        [ForeignKey("UserType")]
        public int UserTypeID { get; set; }
        
        //[ForeignKey("User")]
        public int ManagerID { get; set; }

     

        [DataType("VARCHAR")]
        [StringLength(255)]
        public string Password { get; set; }
        public DateTime CreatedDate { get; set; }

        public virtual UserType UserType { get; set; }
        [ForeignKey("ManagerID")]
        public virtual User Manager { get; set; }


        
    }
}

我的解决方案是这个,但是当我插入managerID时遇到问题,当我在表上设置某些userID时将不会插入,但是当我通过LINQ插入时,它插入了managerID属性,我不知道为什么会这样!

var employee = new User()
            {
                ID = user.ID,
                FullName = user.FullName,
                Email = user.Email,
                Password = user.Password.ToString().GetHashCode().ToString(),
                Manager = HR.Users.Where(s => s.ID ==123).FirstOrDefault(),
                UserTypeID = 12,
                JobTitle = user.JobTitle,
                PhoneNumber = user.PhoneNumber,
                CreatedDate = DateTime.Now,
            };
HR.Users.Add(employee);
HR.SaveChanges();

即使在上面的示例中以硬编码方式插入的userTypeID,也是如此

0 个答案:

没有答案