2015-07-19 86 views
1

我有我的實體框架POCO類的兩個對象稱爲救生艇和瞄準實體框架的關係0..1 1 .. *反向鏈接

瞄準有1間.. *救生艇的關係,這似乎工作罰款(與SightingLifeboats

的鏈接表我現在還需要備份參考這種關係,所以我需要從救生艇到瞄準一個鏈接,這將是0 .. *

我試圖做反向,並試圖使一個虛擬,但這沒有奏效,也許我需要更流利的編碼?

我救生艇類:

public class Lifeboat : EntityBase 
{ 
    public Lifeboat() 
    { 
     Sightings = new List<Sighting>(); 
    } 

    public string CurrentName { get; set; } 

    //A Lifeboat Ownes 0:* Sightings 
    public List<Sighting> Sightings { get; set; } 
    //public virtual Sighting Sightings { get; set; } 

    //Called from Context Class OnModelCreating 
    public static void LifeboatEntityConfiguration(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Lifeboat>().HasMany(x => x.Sightings).WithMany(); 
    } 
} 

瞄類

public class Sighting : EntityBase 
{ 
    public Sighting() 
    { 
     Lifeboats = new List<Lifeboat>(); 
     TimeSeen = DateTime.Now.Date; 
    } 

    public string Location { get; set; } 

    //A Sighting has 1..* Lifeboats (Not Owned) 
    public List<Lifeboat> Lifeboats { get; set; } 
    //public virtual Lifeboat Lifeboat { get; set; } 

    public static void SightingEntityConfiguration(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Sighting>().HasMany(x => x.Lifeboats).WithMany(); 
    } 

}

回答

2

那是不是配置許多人LifeboatSighting之間有很多關係的正確方法。如果您刪除了已有的Fluent Api配置,則默認情況下,EF將創建第三個加入表SightingLifeboats,該表將由兩個表的PK組成。那是因爲你在每個實體中都有一個集合導航屬性。但是你可以使用流暢API明確配置的關係:

modelBuilder.Entity<LifeBoat>() 
      .HasMany<Sighting >(l => l.Sightings) 
      .WithMany(s => s.LifeBoats) 
      .Map(cs => 
         { 
         cs.MapLeftKey("LifeBoatRefId"); 
         cs.MapRightKey("SightingId"); 
         cs.ToTable("SightingLifeboats"); 
         }); 

這樣你就可以改變接線表的名稱,並指定FK屬性名稱,如果你需要改變它們。

另一件事,我建議改變您的收藏屬性virtual。如果你讓所有的屬性virtual那麼EF會生成代理類在運行時,從你的POCO類派生,這些代理允許EF,瞭解實時變化而不必捕獲對象的原始值,然後在保存時掃描更改。

+0

多數民衆贊成在工作表示感謝,我已經實施救生艇 - >瞄準首先得到啓動和運行(這需要一些流利)我想我試圖去除流利但錯誤消息出現這暗示(對我來說)這是需要。我其實需要清理數據庫才能運行。 – Frazer