Foriegn Key来自单个列上的多个表EF代码首先

时间:2016-07-25 08:11:43

标签: entity-framework database-design ef-code-first

我使用的是EF版本6.1并且存在映射问题:

class BasePoco 
{ 
   public Guid Id{get;set;}
}
class Student : BasePoco
{
    public string Name;
}
public class UserBase : BasePoco
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Gender { get; set; }
    public string Photo { get; set; }
}
public class UserDetail : UserBase
{
    public string MobileNumber { get; set; }
    public string EmailID { get; set; }
}
public Enum UserType
{
  Student = 1, 
  User=2
}

出勤班

public class Attendance 
{
   public class UserId {get;set;}   // Can be either student or user
   public UserType UserType {get;set;}
}

我需要在同一张桌子上标记学生和用户的出勤率。 UserType将确定Id是学生还是用户,主键是UserType和Id的组合。

如何使用EF代码第一种方法实现此目的。

1 个答案:

答案 0 :(得分:-1)

很抱歉,您无法使用多种类型的单一属性。你明白,因为EF会运行元数据。哪个使用EF知道模型类的元数据。这是个问题。考勤表foregin键是多表referance和考勤模型包含两个模型。您应该创建逻辑层以检查UserType并访问正确的模型。例如

public class Attendance
{
public UserType userType {get;set;}

public Guid? UserId {get;set;}
public virtual User user {get;set;}

public Guid? StudentId {get;set;}
public virtual Student student {get;set;}
}

现在是图层类

public class AttendanceUserLayer
{
public static object GetUser(Attendance attendance) {
if (attendance.userType == UserType.User) {
return attendance.User;
} else {
return attendance.Student;
}
}

如何使用

Attendance attendance = context.Attendance.FirstOrDefault();
var userOrStudent = AttendanceUserLayer.GetUser(attendance);

如果你不能使用对象类型的结果,那么写接口的类和设置返回类型的接口。