Използвам 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 за отговор № 1За съжаление не можете да използвате няколко типа над единиченИмот. Вие разбирате, защото EF се справя с метаданни. Които използват EF познават метаданни от моделен клас. Това е проблем. Таблица за присъствие на foregin ключ е множествена таблица referance и Attendance модел съдържа и двата модела. Трябва да създадете логически слой за проверка на 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);
ако не можете да използвате типа резултат на обекта, запишете интерфейса и двата класа и задайте типа връщане на този интерфейс.