2017-02-10 10 views
0

Я разрабатываю миграцию кода с использованием Entity Framework и имею некоторые проблемы, когда один объект имеет список того же типа, что и сам. Скажем, у меня есть User объекта, который имеет List<User> как его Friends:Наличие одного и того же объекта в Entity Framework

public class User 
{ 
    [Key] 
    public int UserId { get; set; } 

    // some other stuff 

    public List<User> Friends { get; set; } 
} 

Проблема заключается в том EF ищет внешний ключ для пользователя и пытается создать, когда он не мог найти:

AddColumn("dbo.Users", "User_UserId", c => c.Int()); 

Я стараюсь не делать UserId ключом и внешним ключом одновременно, так что это хорошая практика здесь?

+1

'UserId' не может быть внешним ключом, это отношения один-ко-многим. Вам понадобится отдельная таблица друзей пользователя, а записи, связывающие идентификатор пользователя с идентификаторами друга. – dasblinkenlight

+1

Для друзей и пользователей необходимо иметь отдельные таблицы. В вашем случае инфраструктура Entity пытается определить внешний ключ для построения отношений. И он находит UserId из той же таблицы, которая является уникальным первичным ключом. Вы не можете этого избежать. – Pavvy

ответ

-1

Вы не можете использовать List<T> для соответствующей коллекции в Entity Framework. Он должен быть virtual ICollection<T>.

+0

Пробовал виртуальный ICollection и получил тот же результат – Yar

+1

Это неправда. Вы можете использовать 'List '. Я не говорю, что это рекомендуется, но это возможно. И это не * *, чтобы быть виртуальным. –

1

Отдельная таблица будет лучше всего здесь.

Имя: UserFriend PK: UserFriendId FK: UserId FK: FriendId

 Смежные вопросы

  • Нет связанных вопросов^_^