Свободный API, EF 4.1: проблема наследования и внешнего ключа - PullRequest
1 голос
/ 15 апреля 2011

Есть несколько простых классов:

Первый класс:

public class User
{
   public int UserId { get; set; }
   public string Username { get; set; }

   // ...

   public ICollection<Topic> Topics { get; set; }
}

Второй класс:

public class Publication 
{
   public int PublicationId { get; set; }
   public string Title { get; set; }

   / ...

   public User Author { get; set; }
}

Третий класс:

public class Topic: Publication 
{
   public string TopicContent { get; set; }

   // ...
}

После создания базы данных для моей модели у меня есть следующая структура базы данных:

Пользователи

UserId

UserName

Публикации

PublicationId

Название

TopicContent

Author_UserId

User_UserId

Как видите, я получаю два поля Author_UserId и User_UserId с одинаковой ролью в таблице Publications.

Как можно объединить эти поля в одно поле с помощью Fluent API или аннотации данных?

1 Ответ

1 голос
/ 15 апреля 2011

Не думаю, что в таблице Publications может быть такой же столбец внешнего ключа.Publication.Author и User.Topics не могут быть конечными точками одной и той же ассоциации.Вы можете иметь экземпляр Publication, который не является Topic и ссылку на User:

User user = new User() { Topics = new List<Topic>() };
Publication publication = new Publication();

publication.Author = user;

user.Topics.Add(???);

В ???Вы не можете добавить publication, потому что это не экземпляр Topic.user.Topics должен ссылаться на другой объект, кроме publication, что означает, что эти конечные точки не могут принадлежать одной и той же ассоциации.

Редактировать

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

public ICollection<Publication> Publications { get; set; }
...