2012-12-06 44 views
1

virI'm試圖創建一個查找表在我的ASP.NET MVC4應用與實體框架代碼優先。這是我們的地點,應該有兩個條目。我需要有一些與它們關聯的ID,所以我的軟件表中存儲了一個LocationID。但是,當我創建它們時,會爲軟件表中的每一行創建一個條目。ASP.NET MVC4:如何創建查找表,使條目不重複

這裏是我的軟件類:

public class Software 
    { 
     public int Id { get; set; } 
     public virtual List<SoftwareType> SoftwareTypes { get; set; } 
     public virtual List<Location> Locations { get; set; } 
     public virtual List<SoftwarePublisher> Publishers { get; set; } 
     [Required] 
     [StringLength(128)] 
     public string Title { get; set; } 
     [Required] 
     [StringLength(10)] 
     public string Version { get; set; } 
     [Required] 
     [StringLength(128)] 
     public string SerialNumber { get; set; } 
     [Required] 
     [StringLength(3)] 
     public string Platform { get; set; } 
     [StringLength(1000)] 
     public string Notes { get; set; } 
     [Required] 
     [StringLength(15)] 
     public string PurchaseDate { get; set; } 
     public bool Suite { get; set; } 
     public string SubscriptionEndDate { get; set; } 
     //[Required] 
     //[StringLength(3)] 
     public int SeatCount { get; set; } 

    } 

這裏是我的位置類:

public class Location 
    { 
     public int Id { get; set; } 
     [Required] 
     [StringLength(20)] 
     public string LocationName { get; set; } 
     public virtual Software Software { get; set; } 
    } 

這裏是我的Global.asax調用種子方法:

Database.SetInitializer(new SampleData()); 
      using (var context = new Context()) 
      { 
       context.Database.Initialize(true); 
      } 

這裏是我的背景:

public class Context : DbContext 
    { 
     public DbSet<Software> Software { get; set; } 
     public DbSet<Location> Locations { get; set; } 
     public DbSet<SoftwarePublisher> SoftwarePublishers { get; set; } 
     public DbSet<SoftwareType> SoftwareTypes { get; set; } 

     public Context() 
     { 
      Configuration.ProxyCreationEnabled = false; 
     } 
    } 

這裏是我的接種:將

public class SampleData : CreateDatabaseIfNotExists<Context> 
    { 
     protected override void Seed(Context context) 
     { 
      new List<Software> { 
        new Software { 
         Title = "Adobe Creative Suite", 
         Version = "CS6", 
         SerialNumber = "1234634543", 
         Platform = "Mac", 
         Notes = "Macs rock!", 
         PurchaseDate = "2012-12-04", 
         Suite = true, 
         SubscriptionEndDate = null, 
         SeatCount = 0, 
         SoftwareTypes = new List<SoftwareType> 
           { new SoftwareType { Type="Suite" }}, 
         Locations = new List<Location> 
           { new Location { LocationName = "Paradise" }}, 
         Publishers = new List<SoftwarePublisher> 
           { new SoftwarePublisher { Publisher = "Adobe" }}}, 
       ...other similar rows... 
       }.ForEach(s => context.Software.Add(s)); 

      base.Seed(context); 
      context.SaveChanges(); 

     } 

因爲我創造的東西像位置的新列表(我需要修復的其他東西一樣SoftwareType和出版商,但讓我們專注於位置),它是在我的位置表中創建一個新行。我如何重構我的類,以便在我的位置表中有兩個條目,然後在我的軟件表中指向這兩個條目之一的ID?請記住我是一個實體框架的新手,所以請儘量明確。謝謝。

+0

有人說片斷請幫助... – sehummel

+0

可以在一個位置有多個軟件或只有一個? –

+0

一個位置可以有多個軟件,是的。 – sehummel

回答

0

我想你想要一個軟件和位置之間的多對多關係。爲此,您需要創建一個連接表(也稱爲鏈接表)。我相信你想這樣做,在你的OnModelCreating覆蓋

this.HasMany(i => i.Softwares) 
      .WithMany(c => c.Locations) 
      .Map(mc => 
      { 
       mc.MapLeftKey("SoftwareId"); 
       mc.MapRightKey("LocationId"); 
       mc.ToTable("SoftwareLocations"); 
      }); 

我從這個blog post

+0

謝謝!我認爲這是我正在尋找的。 – sehummel