我使用的是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代码第一种方法实现此目的。
答案 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);
如果你不能使用对象类型的结果,那么写接口的类和设置返回类型的接口。