Поскольку объект Page
имеет отношение один ко многим с объектом Content
, следовательно, каждая страница имеет много содержимого, и каждый контент попадает только на одну страницу, поэтому объект страницы должен иметь список содержимого иСущность Content должна иметь свойство типа Page
, представляющее ссылку на страницу вместо внешнего ключа PageId
, поэтому вам не нужно было извлекать идентификатор страницы для добавления нового контента, как показано ниже:
[Table]
public class Page
{
...
private EntitySet<Content> _contents;
[Association(Storage = "_contents", ThisKey = "Id", OtherKey = "PageId")]
public EntitySet<Content> Contents
{
get { return _contents; }
set { _contents.Assign(value); }
}
...
}
Для сущности Контента:
[Table]
public class Content
{
...
[Column]
int PageId{ get; set; }
EntityRef<Page> _page;
[Association(Storage = "_page", ThisKey = "PageId",
OtherKey = "Id", IsForeignKey = true)]
public Page Page
{
get { return _page.Entity; }
set { _page.Entity = value; }
}
}
Всякий раз, когда вам нужно инертировать новый Контент, вы должны передать ссылку на страницу, например:
Page pageReference = //Get By its id or whatever
//or
Page pageReference = new Page { Id = 1, name = " ",....};
Repository.Add( new Content{ Id = 1,...,Page = pageReference });
Обратите внимание: метод add просто делает InserOnSubmit
для объекта.
Таким образом, всякий раз, когда вы хотите вставить новый контент, вы можете прикрепить любую страницу или добавить любую новую страницу только из сущности страницы, а не из Контента, и вам не нужно было извлекать идентификатор страницы вЧтобы сказать им, что это за страница с таким содержанием, просто определите отношение как отношения объектов, а не как внешние ключи.