Ho definito una classe nel mio progetto di dominio (poco?):pigro carico non funziona in Entity Framework 5
public class Club
{
public Club()
{
ContactPersons = new HashSet<ContactPerson>();
}
public int Id { get; set; }
[Required]
[StringLength(64)]
public string Name { get; set; }
public virtual ICollection<ContactPerson> ContactPersons { get; set; }
}
public class ContactPerson
{
public virtual int Id { get; set; }
[StringLength(64)]
public virtual string FirstName { get; set; }
[StringLength(64)]
public virtual string LastName { get; set; }
}
Nel mio progetto MVC ho il mio clubcontroller:
public ActionResult Create(CreateClubViewModel model)
{
Club club = new Club();
model.Initialize(club);
IClubDb clubDb = DependencyResolverHelper.IClubDbService;
clubDb.Create(club); // create club in db
}
public ActionResult Display(string domain)
{
try
{
IClubDb clubDb = DependencyResolverHelper.IClubDbService;
Club club = clubDb.Get(domain);
return View(club);
}
catch (Exception) // user is not logged iin
{
return View();
}
}
Infine , nel mio progetto DB creo e recuperare il club,
public Club Get(string name)
{
return DataContext.Clubs
//.Include(x => x.ContactPersons)
.Single(r => r.Name == name);
}
public int Create(Club club)
{
DataContext.Clubs.Add(club);
return DataContext.SaveChanges();
}
ho provato di tutto per arrivare EF a carico pigri i ContactPersons di m y oggetto del club quando chiamo Get club nel metodo Display ma ContactPersons ha sempre una lunghezza pari a zero. Tuttavia, se desidero caricare le persone di contatto usando l'inclusione (ho commentato questa parte), ovviamente ContactPersons contiene un numero di contatti.
Non sono sicuro di quello che sto facendo male:
- ho seguito le linee guida per la definizione di classi Poco: http://msdn.microsoft.com/en-us/library/dd468057.aspx
- Ho un parametro di pubblico meno costruttore (ma non protetta costruttore)
- Ho abilitato lazyloading
Penso che mi manca un concetto, la classe club poco è anche la mia entità di dominio che inserisco in DB. Che cosa sto facendo di sbagliato? Whay Non riesco a scaricare pigro al lavoro?
Provare a utilizzare un 'Elenco' invece di un 'ICollection '. Non credo che EF sia abbastanza intelligente da usare il Dominic di ICollection –
, ho appena provato il tuo suggerimento, sempre lo stesso, ContactPersons è vuoto :( – user1780105
@Dominic: 'ICollection' funziona abbastanza bene, ha anche più senso da una lista 'implica un ordine e le entità correlate non vengono restituite in alcun ordine particolare –