2010-05-30 3 views
2

ли EF поддержка 4 однонаправленный один-ко-многим ассоциаций, как в:Однонаправленные ассоциации «один-ко-многим» в платформе Entity Framework 4?

public class Parent 
{ 
    public int Id { get; set; } 
    public string Something { get; set; } 
    public List<Child> AllMyChildren { get; set; } 
} 

public class Child 
{ 
    public int Id { get; set; } 
    public string Anotherthing { get; set; } 
    // I don't want a back-reference to the Parent! 
    // public int ParentId { get; set; } 
} 

Когда я пытаюсь скомпилировать мой проект с ассоциацией между родителем и ребенком, где END2 навигации является пустой (потому что я отключили END2 навигации Property box в диалоговом окне Добавить ассоциацию), я получаю

Ошибка 2027: сопоставление не определено для следующего EntitySet/AssociationSet - Child.

UPDATE:

А что, если я просто есть список или аналогичную собственность на Родителя, а не список? Нужно ли создавать тип упаковки для хранения строки, чтобы я мог также сохранить обратную ссылку на родительский?

+0

Почему вы не хотите обратную ссылку? Почему это вас беспокоит? Это * - поведение по умолчанию для EF, и я не думаю, что вы можете отключить это - ассоциация всегда является двусторонней улицей. –

+0

@marc_s: Ребенку никогда не понадобится ссылаться на родителя и никогда не будет перемещен с одного родитель к другому. С точки зрения бизнес-объекта нет необходимости ссылаться на родителя или заботиться о нем. Если я добавлю ссылку на родителя, это просто для удовлетворения требований механизма сохранения. На самом деле Child был структурой с несколькими простыми свойствами, прежде чем мне пришлось изменить его на класс, чтобы удовлетворить EF. –

+0

@ Эрик J: Хорошо, с точки зрения пуриста, я понимаю, что вы это понимаете. Но зачем бороться с этим - просто быть прагматичным и соглашаться с тем, как ваши рамки работают и работают по его линиям, а не против этого. Вы сбережете себе много горя. –

ответ

2

Belive, что это будет работать, используя Fluent API (только способ deifning однонаправленных ассоциаций)

modelBuilder.Entity<Child>() 
.HasKey(t => t.Id); 

modelBuilder.Entity<Parent>() 
.HasMany(p => p.AllMyChildren) 
.WithRequiredPrincipal(); 

http://msdn.microsoft.com/en-us/library/hh295843(v=VS.103).aspx

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