1
任何人都可以幫助我使用EF 4.3定義關係映射。當我試圖在代碼中模擬它們時,我有點失落映射模型實體框架4代碼優先
邏輯在這裏。
- 一個城市有1個或多個位置(例如1區,CBD,南,北)
- 一個位置具有0個或多個場地
- 一個地點可以屬於1個地點(如紐約CBD或如果城市很小且沒有任何位置(例如夏威夷),則屬於1個城市,並且1個所有者
- 顯示城市中的場地數目。如果一個城市有位置,則顯示no。所有地點的所有場館都屬於城市。否則,僅顯示不屬於該城市的場地。
這裏是我的模型
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();
}
}
我知道這簡單,如果市僅包含位置的集合,但是如果我想要得到所有小城市的場地例如夏威夷,當小城市根本沒有任何位置時,我怎麼能做這個查詢 – 2012-03-15 01:48:47
讓城市至少有一個位置。一個小城市將擁有一個包含該城市所有場館的位置。通過這種方式,您可以使用相同的代碼處理大城市和小城市。 – 2012-03-15 02:15:15
你如何映射模型,使城市至少有一個位置?其實我仍然不相信這種方法,即我必須定義城市,然後定義城市的位置,例如新南威爾士州奧爾伯裏鎮和阿爾伯裏的位置? – 2012-03-15 02:25:12