2013-06-23 4 views
1

Я хочу создать производный класс для моего объекта User, который имеет некоторые дополнительные свойства (класс LoginUser), но структура entity затем возвращает производный класс, когда я извлекаю пользователя из база данных. Это нежелательное .. Производный класс не имеет параметр меньше конструктора и должен быть создан только в качестве оболочки для входа в системе .. Так что я добавил к этому в onCreateModel:»Использовать сопоставления базового класса для производного класса - Entity Framework 5

modelBuilder.Ignore<LoginUser >(); 

Но теперь, когда я пытаюсь .? хранить или ссылаться на мой объект LoginUser он бросает исключение, сказав, что предприятие не имеет отображения (LoginUser) Как я могу сделать рамки сущности использовать отображения для базового класса

Это мои классы:

public class User 
{ 
    public int Id { get; set; } 

    public string Name { get; set; } 

    public string Role { get; set; } 
} 



public class LoginUser : User, IPrincipal 
{ 
    private IPrincipal underlayingPrincipal; 

    public IIdentity Identity 
    { 
     get 
     { 
      return this.underlayingPrincipal.Identity; 
     } 
    } 

    public LoginUser(IPrincipal principal, User user) 
    { 
     this.underlayingPrincipal = principal; 
     this.Id = user.Id; 
     this.Name = user.Name; 
     this.Role = user.Role; 
    } 

    public bool IsInRole(string role) 
    { 
     return this.Role == role; 
    } 
} 

ответ

2

LoginUser не должен расширять Пользователь, он должен быть независимым который будет отображаться с/на пользователя при получении/сохранении вашего пользователя. Класс модели базы данных должен оставаться в базе данных, а классы, которые вы передаете в представления, должны быть независимыми и сопоставляться с моделью базы данных.

Если в любом случае вы хотите, чтобы передать вам класс пользователя к модели, вы можете просто сделать частичный класс пользователя и добавить дополнительный inof (свойства, интерфейсы ...)

partial class User 
{ 
    private IPrincipal underlayingPrincipal; 
    public IIdentity Identity 
    { 
    get 
    { 
     return this.underlayingPrincipal.Identity; 
    } 
    } 

    public User(IPrincipal principal, User user) 
    { 
    this.underlayingPrincipal = principal; 
    this.Id = user.Id; 
    this.Name = user.Name; 
    this.Role = user.Role; 
    } 

    public bool IsInRole(string role) 
    { 
    return this.Role == role; 
    } 
} 
+0

я в конечном итоге делаю свойство типа User в моем элементе LoginUser и больше не расширять его. Благодарю. – Osd