2013-08-08 4 views
4

Скажем, у меня есть следующие объекты:Как смоделировать один путь один на один в Fluent EF?

Box 
    Id 
    Crank crank // has one required relationship 

Crank 
    Id // does not care about the box 

Что такое правильный способ определения BoxMap? Достаточно ли этого? Или мне нужно WithRequiredPrincipal (я понятия не имею, что это делает):

HasKey(t => t.Id); 
ToTable("Boxes") 
Property(t=>t.Id).HasColumnName("Id") 
Property(t=>t.CrankId).HasColumnName("Crank_Id") 
HasRequired(t=>t.Crank) 

ПРИМЕЧАНИЕ: Любые хорошие ресурсы по обучению свободно апи приветствуются. Благодарю.

+0

Я бы очень рекомендовал вам прочитать эту серию: http://weblogs.asp.net/manavi/archive/2011/03/27/associations-in-ef-4-1-code-first-part-1- Introduction-and-basic-concepts.aspx – Moeri

ответ

3
public class Context : DbContext 
{ 
    public DbSet<Box> Boxes { get; set; } 
    public DbSet<Crank> Cranks { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 

     modelBuilder.Entity<Box>() 
      .HasRequired(m => m.Crank) 
      .WithOptional() 
      .Map(m => m.MapKey("Crank_Id")); 

     base.OnModelCreating(modelBuilder); 
    } 
} 

public class Box 
{ 
    public int Id { get; set; } 
    public Crank Crank { get; set; } // has one required relationship 
} 

public class Crank 
{ 
    public int Id { get; set; } 
} 

Вам не нужно указать это:

HasKey(t => t.Id); 
ToTable("Boxes") 
Property(t=>t.Id).HasColumnName("Id") 
Property(t=>t.CrankId).HasColumnName("Crank_Id") 
HasRequired(t=>t.Crank) 

детектируется по соглашению ФВ.

+0

Ну, я имею в виду, что вы _did_ указываете 'HasRequired' (что у меня было). Добавочная вещь, которую вы добавили, была 'WithOptional' - не могли бы вы объяснить, что это делает? – drozzy

+1

Это отношение один к одному или одно отношение. WithOptional означает, что Crank может иметь одно или нулевые отношения с Box. http://stackoverflow.com/a/5423308/1219444 - больше объяснений для такой же ситуации. –