我有一个简单的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,也是如此