簡體   English   中英

映射模型實體框架4代碼優先

[英]Mapping Model Entity Framework 4 Code First

誰能幫助我使用EF 4.3定義關系映射。 首先嘗試在代碼中建模時,我有點迷路

邏輯在這里。

  1. 一個城市有1個或多個位置(例如,第1區,中央商務區,南,北)
  2. 一個地點有0個或更多地點
  3. 一個地點可能屬於1個地點(例如,紐約CBD或南紐約),如果城市很小且沒有任何地點(例如,夏威夷),則該地點可能屬於1個城市,並且所有者可能為1
  4. 顯示城市場所的數量。 如果城市有位置,則顯示否。 在所有地點的所有場館中,屬於城市。 否則,將顯示僅屬於該城市的場館編號。

這是我的模特

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM