Я использую EF6. Я создал объект в EF-модели, который действует как суперкласс под названием AppUser, содержащий все свойства, которые я хочу создать в базе данных. Однако я создал еще один класс, называемый AppUserM, наследующий от AppUser; дочерний класс имеет несколько методов для некоторых операций пользовательского интерфейса. См класс AppUser ниже:Класс ребенка EF Entity не передается в DBC-контексте, потому что он не является частью модели
[Table("appUser")]
public class AppUser
{
public AppUser()
{
this._AccessRights = new HashSet<AccessRight>();
this._ActivityLog = new HashSet<ActivityLog>();
}
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int userId { get; set; }
[MaxLength(50)]
[DisplayName("Username")]
public string username { get; set; }
[DataType(DataType.Password)]
[MaxLength(2000)]
[DisplayName("Password")]
public string password { get; set; }
[MaxLength(4000)]
[DisplayName("FullName")]
public string fullname { get; set; }
public bool isADUser { get; set; }
[ForeignKey("BankBranch")]
public int branchId { get; set; }
[ForeignKey("AppRole")]
public int roleId { get; set; }
public virtual BankBranch BankBranch { get; set; }
public virtual AppRole AppRole { get; set; }
public virtual ICollection<AccessRight> _AccessRights { get; set; }
public virtual ICollection<ActivityLog> _ActivityLog { get; set; }
}
дочерний класс приведен ниже:
public class AppUserM : AppUser
{
public void Add()
{
using (var cntx = new JEntityDbContext())
{
cntx.AppUsers.Add(this);
cntx.SaveChanges();
}
}
public void Read()
{
}
}
Выполнение этого вызывает исключение в методе Add() в AppUserM именно в cntx.AppUsers.Add (это) см. реализацию ниже;
AppUserM user = new AppUserM
{
username = "Hakeem",
password = "pass",
roleId = 1,
isADUser = false,
fullname = "Ojulari Hakeem Olusegun"
};
user.Add();
Исключение:
Дополнительная информация: тип объекта AppUserM не является частью модели для текущего контекста.
Я не хочу, чтобы отобразить классы в методе Add(), как этот
AppUser user = new AppUser {username = this.username};
затем после этого
cntx.AppUsers.Add(user);
Я хочу, чтобы свести к минимуму время, печатая и обеспечения эффективности. Есть ли лучший способ достичь этого. Спасибо за ваши вклады
Пожалуйста, обратите внимание, что я мог бы также сделать ** Добавить (пользователь AppUser) **, который я не хочу, потому что я мог бы добавить некоторые свойства AppUserM для внутренних манипуляций в рамках метода перед совершением. –
Я не ожидаю, что EF сможет справиться с этим, поскольку EF создает прокси для ваших классов сущностей (для обработки ленивой загрузки и т. Д. Путем переопределения ваших виртуальных навигационных реквизитов). Поэтому добавление другого слоя наследования не будет работать. Кроме того, как вы ожидаете, что EF вернет любые экземпляры типа «AppUserM»? – Maarten