2012-03-19 4 views
1

У меня есть следующий C# класс:рамки Entity странное отображение

public class SomeClass{ 
    public string Name; 
    public List<SomeClass> List1; 
    public List<SomeClass> List2; 
} 

Когда у меня есть 2 экземпляра SomeClass (SomeClass1 и SomeClass2) и сделать что-то вроде:

SomeClass1.List1.Add(SomeClass2); 

Он также добавляет SomeClass1 к SomeClass2.List2 по какой-то причине при вызове context.SaveChanges(). Как я могу это предотвратить?

Редактировать: Сначала я использую код. Thanks

+1

Невозможно сказать, не видя созданного вами сопоставления. Пожалуйста, предоставьте это. –

+0

Это код в первую очередь? –

+0

Это код первым. Я забыл добавить это. – Fritsie

ответ

1

Если у вас нет сопоставления с Fluent API EF, вы создадите отображение на основе условных обозначений. Конвенция в этом случае заключается в том, что List1 и List2 являются обратными свойствами навигации с одинаковыми отношениями - в этом случае отношения «многие из многих» связаны друг с другом.

Эффект вы испытываете автоматический отношения Fixup, который выполняется, когда DetectChanges() называется (или SaveChanges(), который вызывает DetectChanges() внутри). Это исправление автоматически обновляет свойства обратной привязки присоединенных объектов, чтобы они были согласованы друг с другом. Вы не можете предотвратить это, и это не должно быть проблемой.

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

Если вы не хотите, отображение между двумя списками, необходимо указать явное отображение с Fluent API. Например: Если оба списка принадлежат отделить один-ко-многим необходимо указать:

modelBuilder.Entity<SomeClass>() 
    .HasMany(s => s.List1) 
    .WithRequired()    // or WithOptional() 
    .WillCascadeOnDelete(false); 

modelBuilder.Entity<SomeClass>() 
    .HasMany(s => s.List2) 
    .WithRequired()    // or WithOptional() 
    .WillCascadeOnDelete(false); 

Это отображение говорит о том, что второй конец каждого отношения не подвергается в модели (следовательно WithRequired()/WithOptional() без параметра) ,

Аналогичным образом вы можете указать два отношения «многие ко многим» с помощью HasMany(s => s.List1/2).WithMany().Map(...).

+0

Есть ли способ отменить это отношение? Я не намерен переписывать списки друг друга. – Fritsie

+0

@Fritsie: Посмотрите мое Редактирование. – Slauma

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