Я пытаюсь использовать подход сопоставление внешнего ключа для достижения однозначного сопоставления в EF.В моем случае существует связь между пользователем и командой, и мне нужно свойство навигации в каждом из них.Я столкнулся с проблемой при попытке сохранить данные.
Вот как выглядят модели:
public class Team
{
public int ID { get; set; }
public string Name { get; set; }
public int OwnerID { get; set; }
public virtual User Owner { get; set; }
}
public class User
{
public int ID { get; set; }
public string UserName { get; set; }
public int TeamID { get; set; }
public virtual Team Team { get; set; }
}
Я добавил эти биты в DbContext
OnModelCreating()
, как указано всообщение в блоге, на которое ссылаются выше:
modelBuilder.Entity<User>()
.HasRequired(u => u.Team)
.WithMany()
.HasForeignKey(u => u.TeamID);
modelBuilder.Entity<Team>()
.HasRequired(t => t.Owner)
.WithMany()
.HasForeignKey(t => t.OwnerID)
.WillCascadeOnDelete(false);
А теперь при добавлении данных вот так:
User u = new User();
u.UserName = "farinha";
Team t = new Team("Flour Power");
u.Team = t;
t.Owner = u;
context.Users.Add(u);
context.Teams.Add(t);
context.SaveChanges();
или даже так:
User u = new User();
u.UserName = "farinha";
u.Team = new Team("Flour Power");
context.Users.Add(u);
context.SaveChanges();
Я получаюследующая ошибка:
Невозможно определить действительный порядок для зависимых операций.Зависимости могут существовать из-за ограничений внешнего ключа, требований модели или сгенерированных в магазине значений.
Есть идеи, как решить эту проблему?Я неправильно сохраняю данные?
Заранее спасибо