EF картографический вопрос - PullRequest
1 голос
/ 30 апреля 2011

Допустим, у меня есть следующие классы:

public class User
{
    public int UserId { get;set;}
    public string Firstname { get;set;}
    public Interests Interests { get;set;}
}
public class Interests
{
    public IList<Team> FavoriteTeams { get;set;}
    public IList<Food> FavoriteFoods { get;set;}
}
public class Team{
    public int TeamId { get;set;}
    public string City {get;set;}
    public string Name { get;;set;}
}
public class Food{
    public int FoodId { get;set;}
    public string FoodName { get;set;}
}

На уровне базы данных мне бы хотелось иметь следующие таблицы:

Команды пользователей Foods UserTeams UserFoods

В основном я хотел бы иметь свойство Interests пользовательского объекта, но не иметь отдельной таблицы для него.

Я использую код EF 4.1 для первых классов POCO.Я знаю, что проще всего сделать коллекцию «Команды и продукты питания» как свойство для пользователя, что нормально, но с точки зрения объектной модели мне бы хотелось, чтобы это было его собственное свойство.Любая идея о том, как я получу этот тип отображения?

1 Ответ

3 голосов
/ 30 апреля 2011

Я бы сказал: отображение, которое вы ищете, невозможно, потому что:

Если вы не хотите, чтобы класс Interests отображался в таблицу, он не должен быть сущностью, а свойство Interests в вашем классе User не должно быть свойством навигации. Во избежание того, что EF интерпретирует свойство Interests как свойство навигации, у вас будет только два варианта:

  • Пометить его как NotMapped -> Не помогает, потому что вы потеряете отношения с User до Team и Food полностью
  • Пометьте класс Interests как ComplexType -> В вашем примере это невозможно, поскольку сложные типы не могут содержать свойства навигации .

Это только от моего уровня понимания. Не исключено, что я упустил еще один вариант.

...