Entity Framework. Код первый. Отношения с таблицей между - PullRequest
1 голос
/ 17 мая 2011

У меня есть база данных, аналогичная той, что в этом примере .Не сценарий «Студенческие курсы», а две таблицы, у которых общая треть связана с ними обоими.

В моем случае это Items, PerformanceGraphItems и PerformanceGraphSeries.

Каждый элемент может иметь несколько GraphItems, а GraphItem принадлежит строке GraphSeries.Как я могу смоделировать его в Entity Framework, чтобы иметь доступ к GraphSeries, принадлежащим Предмету?

Что-то вроде этого.

public class Item
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public virtual ICollection<PerformanceGraphItem> PerformanceGraphItems { get; set; }


        public virtual ICollection<PerformanceGraphSeries> PerformanceGraphSeries { get; set; }
    }



public class PerformanceGraphItem
    {
        [Key]
        public int Id { get; set; }
        [ForeignKey("Item")]
        public int ItemId { get; set; }
        public int SeriesId { get; set; }
        public short Year { get; set; }
        public double RateOfReturn { get; set; }
        public virtual Item Item { get; set; }
        [ForeignKey("SeriesId")]
        public virtual PerformanceGraphSeries PerformanceGraphSeries { get; set; }

    }


public class PerformanceGraphSeries
    {
        public int id { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }

        public virtual ICollection<PerformanceGraphItem> PerformanceGraphItems { get; set; }

    }

1 Ответ

2 голосов
/ 17 мая 2011

Мне кажется, что то, что у вас есть, довольно близко к тому, что вы хотите, хотя я бы изменил ваше

public virtual ICollection<PerformanceGraphSeries> PerformanceGraphSeries { get; set; }

строка вместо

public virtual IEnumerable<PerformanceGraphSeries> PerformanceGraphSeries
{
    get
    {
        return PerformanceGraphItems.Select(pgi => pgi.PerformanceGraphSeries);
    }
}

или

public virtual IEnumerable<PerformanceGraphSeries> PerformanceGraphSeries
{
    get
    {
        return PerformanceGraphItems.Select(pgi => pgi.PerformanceGraphSeries)
                                    .Distinct();
    }
}

в зависимости от вашего сценария.

Это потому, что вы на самом деле не моделируете базу данных, которая имеет прямое соединение между Item и PerformanceGraphSeries - поэтому вы не хотите, чтобы ваша база данных создавалась таким образом. Но это все же позволяет вам обращаться к нему в одном свойстве (вместо того, чтобы выполнять этот запрос везде).

Кроме того, поскольку вы используете virtual в большинстве мест, я предполагаю, что вы пытаетесь использовать прокси-объекты - убедитесь, что вы устанавливаете все ваших свойств как виртуальные, в противном случае этого не произойдет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...