2015-07-19 97 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