Первая автоматическая ассоциативная проблема с внешним ключом кода EF - PullRequest
2 голосов
/ 26 января 2011

Сначала я получил базовое представление о последней версии кода EF в этом уроке - http://www.asp.net/mvc/tutorials/getting-started-with-mvc3-part4-cs, но я немного озадачен одним аспектом и задаюсь вопросом, может ли кто-нибудь пролить на него свет? Чтобы объяснить - есть класс с именем «Сайт», который я хочу иметь поле с именем «HomePageId», который затем должен сопоставляться с объектом «SitePage» с этим идентификатором. Кажется достаточно простым? Но когда EF создает Db и отношения, он, кажется, этого не понимает. Я уверен, что я что-то не так делаю - вот код:

public class Site
{
    public int SiteId { get; set; }
    public string SiteName { get; set; }
    public string SiteUrlPortion { get; set; }

    // Relationship - SitePages
    public virtual ICollection<SitePage> SitePages { get; set; }

    // Relationship - HomePage
    public int HomePageId { get; set; }
    public virtual SitePage HomePage { get; set; }
}

public class SitePage
{
    public int SitePageId { get; set; }
    public string SitePageTitle { get; set; }
    public string SitePageUrlPortion { get; set; }

    // Relationship - Site
    public int SiteId { get; set; }
    public virtual Site Site { get; set; }       
}

Класс "SitePage" создает отношение обратно к "сайту", как и следовало ожидать. Но то, что у меня есть в терминах столбцов в обеих таблицах, не только не имеет смысла, но и отношение со стороны кода не работает должным образом. (Например, когда я присваиваю "Site" "HomePageId", "HomePage" сайта становится пустым.

Очевидно, что есть немного с точки зрения документации, потому что она все еще находится в разработке, но просто интересно, есть ли у кого-нибудь какие-нибудь идеи? Нужно ли начинать украшать свойства с помощью атрибутов? Или я прошу его понять то, чего никогда не будет?!

Спасибо всем заранее. В любом случае я буду настойчивым и отправлю обратно все, что найду, очевидно. Rob

Ответы [ 2 ]

1 голос
/ 27 января 2011

попробуйте пометить свойство HomePage атрибутом ForeignKey, как это

[Foreignkey("HomePageId")]
public virtual SitePage HomePage { get; set; }

вы также можете использовать беглую конфигурацию, но не запомните это

0 голосов
/ 26 января 2011

Это, вероятно, ограничение в EF.Этот EF может обрабатывать только одно отношение между 2 таблицами.

У вас есть 2 отношения между таблицами, списком страниц сайта и домашней страницей.

попробуйте удалить эту строку:

public virtual SitePage HomePage { get; set; } 

У вас все еще есть домашняя страница, так что эта информация была избыточной.

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