MVC3 EF4.1 Code-First Lazy Загрузка - PullRequest
       15

MVC3 EF4.1 Code-First Lazy Загрузка

0 голосов
/ 29 августа 2011

У меня такая ситуация:

Приложение MVC3, с EF4.1 Code-First и SQLCE.

Объекты:

  • содержание;
  • Перевод;

Для каждого элемента Content будет N Перевод, связанный с GUID. Таким образом, класс Content не имеет никакого отношения к переводу, но каждый перевод имеет свойство Content .

Класс Content имеет перевод NotMapped только для отправки одной модели в представление.

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

Но как я могу загрузить перевод из представления? Я новичок в таких вещах, как отложенная загрузка, навигационные свойства и т. Д.

Продолжая, я могу заполнить правильно, но не выяснил, как загрузить оба в одном представлении. Как загрузить перевод на основе параметра "locale".

Может кто-нибудь помочь мне в этом?

Спасибо.

ОБНОВЛЕНИЕ: КОД

Класс содержимого

public class Content
{
    #region [ Properties ]
    /// <summary>
    /// The GUID
    /// </summary>
    [Key]
    public string GUID { get; set; }

    public string Type { get; set; }


    [NotMapped]
    public Translation Translation { get; set; }
    #endregion
}

Класс перевода

public class Translation
{
    [Key]
    public int ID { get; set; }

    public Content Content { get; set; }

    public string Name { get; set; }

    public string Description { get; set; }
}

Код населения

for (int i = start; i < (start + 2); i++)
        {
            Content c = new Content(1234);
            c.Type = Type.ToString();

            using (ContentContext db = new ContentContext())
            {
                if (!db.Contents.Any(o => o.GUID == c.GUID))
                {
                    c.PopulateInfo(Locale);
                    db.Contents.Add(c);

                    c.RegionalInfo.Name = "test";
                    db.Translations.Add(c.Translation);

                    db.SaveChanges();
                }
                else
                {
                    c = db.Contents.Single(o => o.GUID == c.GUID);
                }
            }

    // local list to load on the controller
            Contents.Add(c);
        }

Ответы [ 2 ]

1 голос
/ 30 августа 2011

Сначала я думаю, что ваша сущность Контента должна иметь ICollection of Translation для правильного представления отношения 1: N между Переводом и Контентом. Во-вторых, если вы хотите получить правильный перевод и контент в одном запросе, начните с перевода следующим образом:

var translation = context.Translations.Include("Content").Single(t => t.Content.GUID == contentId && t.Name == locale);
1 голос
/ 30 августа 2011

Вы не можете сделать это.Если вы хотите ленивую загрузку, вы должны выставить Переводы в своем Контенте.Если вы хотите иметь только один не отображенный перевод в Контенте, вы должны загрузить его вручную (отдельный запрос), прежде чем передать контент в представление:

Content content = LoadContent();
content.Translation = context.Translations
                              .Single(t => t.Content.GUID == contentId && t.Name == locale);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...