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