Класс и интерфейс иерархии в Entity Framework?

голоса
11

У меня есть два связанных классов, которые разделяют общий интерфейс и оба хранятся в одной и той же базовой таблице базы данных. Тем не менее, Entity Framework создает один общий класс, где мне очень нужны два различных класса. Как решить эту проблему? Это лучше использовать базовый класс, а не интерфейс? Как изменить модель EF, чтобы обеспечить два класса отображенных над одним столом?

Edit: свойство AccountType определяет тип класса; пользователь или группа пользователей.

Некоторые простой код:

public interface IAccount
{
    string Name { get; set; }
    AccountType AccountType { get; set; }
}

public class GroupAccount : IAccount
{
    public string Name { get; set; }
    public GroupType GroupType { get; set; }
    public AccountType AccountType { get; set; }
}

public class UserAccount : IAccount
{
    public string Username { get; set; }
    public string Password { get; set; }
    public string Name { get; set; }
    public AccountType AccountType { get; set; }
}
Задан 09/12/2008 в 17:05
источник пользователем
На других языках...                            


1 ответов

голоса
14

дискриминируются ли эти данные? т.е. делает AccountType определить, какой тип это? Если так:

  • EF должен создать объект учетной записи из хранилища
  • вы затем создать 2 подклассы (UserAccount и GroupAccount)
  • в отображении для учетной записи, указать предикат «добавить условие»
    • есть это карта для UserAccount где (хранение) поле AccountType является 1 (или любой другой)
    • есть это карта для GroupAccount где (хранение) поле AccountType 2 (или любой другой)

Тип счета, то должны полностью исчезнуть из объекта Account (Unmap его, если нет). Для того, чтобы получить только UserAccount записи, вы используете

 .Accounts.OfType<UserAccount>()...

Класс счета должен вероятно быть абстрактным в этой модели. Интерфейс материал может быть добавлен с помощью частичного класса - то есть в отдельном файле, определяют:

partial class Account : IAccount {
   // extra code here
}

и т.д

Разумное пошаговое руководство здесь .

Ответил 09/12/2008 в 17:09
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more