[英]Mapping Model Entity Framework 4 Code First
誰能幫助我使用EF 4.3定義關系映射。 首先嘗試在代碼中建模時,我有點迷路
邏輯在這里。
這是我的模特
public class City
{
private ICollection<Location> _locations;
private ICollection<Venue> _venues;
public virtual int ID { get; set; }
public virtual string Name { get; set; }
public virtual ICollection<Location> Locations
{
get { return _locations ?? (_locations = new List<Location>()); }
protected set { _locations = value; }
}
public virtual ICollection<Venue> Venues
{
get { return _venues ?? (_venues = new List<Venue>()); }
protected set { _venues = value; }
}
}
public class Location
{
private ICollection<Venue> _venues;
public virtual int ID {get;set;}
public virtual string Name { get; set; }
public virtual int CityID{get;set;}
public virtual City City {get;set;}
public virtual ICollection<Venue> Venues
{
get { return _venues ?? (_venues = new List<Venue>()); }
protected set { _venues = value; }
}
}
public class Owner
{
public virtual int ID {get;set;}
public virtual string Name { get; set; }
public virtual int VenueID {get;set;}
public virtual Venue Venue {get;set;}
}
public class Venue
{
public virtual int ID {get;set;}
public virtual string Name { get; set; }
public virtual int LocationID {get;set;}
public virtual Location VenueLocation {get;set;}
public virtual int VenueCityID{get;set;}
public virtual City VenueCity {get;set;}
public virtual int VenueOwnerID{get;set;}
public virtual Owner VenueOwner {get;set;}
}
我嘗試繪制這些模型,但在嘗試繪制位置,城市和地點時非常困惑
public class Context : DbContext
{
public DbSet<City> City{ get; set; }
public DbSet<Locations> Locations{ get; set; }
public DbSet<Owner> Owners{ get; set; }
public DbSet<Venue> Venues{ get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Location>()
.HasRequired(loc => loc.City)
.WithMany(c => c.Locations)
.HasForeignKey(loc => loc.CityID);
modelBuilder.Entity<Venue>()
.HasRequired(v => v.VenueOwner)
.WithRequiredPrincipal();
//confusing here when trying to map Location & City for this venue
modelBuilder.Entity<Venue>()
.HasRequired(v => v.Location)
.WithRequiredPrincipal();
modelBuilder.Entity<Venue>()
.HasRequired(v => v.City)
.WithRequiredPrincipal();
}
}
如果僅堅持第1點和第2點的說明,您可能會發現它更簡單。然后,一個小城市將有一個locations集合,但只有一個條目。
另外,您的位置將具有場所的集合,並且場所將僅屬於所有者和位置。
然后您將擁有:
public class City
{
private ICollection<Location> _locations;
public virtual int ID { get; set; }
public virtual string Name { get; set; }
public virtual ICollection<Location> Locations
{
get { return _locations ?? (_locations = new List<Location>()); }
protected set { _locations = value; }
}
}
public class Location
{
private ICollection<Venue> _venues;
public virtual int ID {get;set;}
public virtual string Name { get; set; }
public virtual City City {get;set;}
public virtual ICollection<Venue> Venues
{
get { return _venues ?? (_venues = new List<Venue>()); }
protected set { _venues = value; }
}
}
public class Owner
{
public virtual int ID {get;set;}
public virtual string Name { get; set; }
public virtual int VenueID {get;set;}
public virtual Venue Venue {get;set;}
}
public class Venue
{
public virtual int ID {get;set;}
public virtual string Name { get; set; }
public virtual Location VenueLocation {get;set;}
public virtual Owner VenueOwner {get;set;}
}
然后查詢城市中的所有場所:
city.Locations.SelectMany(l => l.Venues);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.