Používam EF verziu 6.1 a mám problém s mapovaním:
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
}
triedu dochádzky
public class Attendance
{
public class UserId {get;set;} // Can be either student or user
public UserType UserType {get;set;}
}
Musím označiť účasť pre študentov, rovnako akoPoužívateľ v rovnakej tabuľke. UserType by určil, či Id je študent alebo používateľ a primárny kľúč by bol kombináciou UserType a Id.
Ako to môžem dosiahnuť pomocou prvého prístupu k kódu EF?
odpovede:
-1 pre odpoveď č. 1Ospravedlňujeme sa, že nemôžete používať viacnásobný typ v jednomvlastnosť. Chápete, pretože EF používa metadáta. Ktoré EF používajú metadáta z triedy modelov. Toto je problém. Kľúčový vstupný klávesový stôl je viacnásobná tabuľka a model dochádzky obsahuje aj model. Mali by ste vytvoriť logickú vrstvu pre kontrolu UserType a prístup k správnemu modelu. Napríklad
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;}
}
teraz vrstvová trieda
public class AttendanceUserLayer
{
public static object GetUser(Attendance attendance) {
if (attendance.userType == UserType.User) {
return attendance.User;
} else {
return attendance.Student;
}
}
ako použiť
Attendance attendance = context.Attendance.FirstOrDefault();
var userOrStudent = AttendanceUserLayer.GetUser(attendance);
ak nemôžete použiť typ výsledku objektu, napíšte rozhranie ako triedu, tak nastavte návratový typ tohto rozhrania.