2012-01-09 3 views
1

У меня есть поставщик-поставщик, каждый объект-поставщик может ссылаться на другой объект-поставщик как на его родителя.Entity Framework 4.1 Code First - Невозможно удалить взаимосвязь между двумя объектами

public class Supplier 
{ 
    public int? Id { get; set; } 

    public virtual Supplier Parent { get; set; } 
} 

Это все работает как ожидается, пока я не попытаюсь удалить отношения, так как у этого поставщика больше нет родителя. Я могу изменить его с нуля на конкретного поставщика, и я могу установить его для другого поставщика, но установка его в null не сохраняется после SaveChanges().

supplier.Parent = null; 

Внешний ключ «ParentId» в таблице «Поставщик» установлен как обнуляемый. Явное определение отношений не помогает.

modelBuilder.Entity<Supplier>().HasOptional(s => s.Parent).WithMany(); 

Уверен, что мне не хватает чего-то очевидного.

ответ

3

Просто найти другое место в моем коде, где я делаю одно и то же (что работает) и нашел, что это;

// Must access property (trigger lazy-loading) before we can set it to null (Entity Framework bug!!!) 
var colour = modelItem.Colour; 
modelItem.Colour = null; 

Сделал то же самое в новом коде, и все это работает.

1

Вместо того, чтобы просто modelBuilder.Entity<Supplier>().HasOptional(s => s.Parent).WithMany(); использовать следующие modelBuilder.Entity<Supplier>().HasOptional(s => s.Parent).WithMany().HasForeignKey(x=>x.ParentId); В противном случае он не имеет представления о том, что имя иностранного ключа является

+0

Мы не используем свойства внешнего ключа i.e ParentId – SeeNoWeevil

+0

Есть ли веские причины не делать этого? –

+0

У меня была такая же проблема, и Стивен прав, вы должны определить внешний ключ. См. Сообщение Артура Викерса здесь: http://social.msdn.microsoft.com/Forums/en-US/adonetefx/thread/35e7438b-ec1f-4d1f-bca0-539ccfb9abb1/ – Marthijn

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