2016-09-12 9 views
0

私は、移行を追加しようとしたすべての時間を使用して新しい列を生成することなく、1対1の関係と、それは、このようなコードを私に示していますEF:流暢API

public override void Up() 
    { 
     AddColumn("dbo.Orders", "OrderItems_Id", c => c.Int(nullable: false)); 
     CreateIndex("dbo.Orders", "OrderItems_Id"); 
     AddForeignKey("dbo.Orders", "OrderItems_Id", "dbo.OrderItems", "Id"); 
    } 

私はグーグルを追求し、発見していません解決策、私のエンティティは、私は注文によって外部キー参照としてorderItemsのOrderIdを設定したい。

 public OrderItemsMapping() 
    { 
     this.HasKey(x => x.Id); 
     this.Property(x => x.GoodId).IsRequired(); 
     this.Property(x => x.OrderId).IsRequired(); 
     this.Property(x => x.Price).IsRequired(); 
     this.Property(x => x.Quantity).IsRequired(); 
     this.Property(x => x.Score).IsRequired(); 

     this.HasOptional(x => x.Order) 
.WithOptionalPrincipal(x => x.OrderItems) 
.Map(configurationAction: new Action<ForeignKeyAssociationMappingConfiguration>(x => x.MapKey())); 

    } 

私が言及する必要が別のものがx.MapKey( "ID")がエラーをトリガすることです:

public class OrderItems 
{ 
    public int Id { get; set; } 
    public int OrderId {get; set;} 
    public virtual Orders Order { get; set; } 
} 
    public class Orders 
{ 
    public int Id { get; set; } 

    public virtual OrderItems Order { get; set; } 
} 

私の流暢APIはbelowsのように見えるの名前は、それを設定していましたユニークでなければなりません。ありがとう。

+0

Whtaは 'Id'と' OrderId'の違いでしょうか? 1対1の関係がある場合、「OrderId」はPKでなければならない。 –

+0

@FarhadJabiyevありがとうございます。OrderIdをキーに設定して問題を解決しました。 – MapleStory

+0

さて、これを答えとして追加しましょう。 FHマッピングで 'Optional'を' Required'に変更した方が良いでしょう。 –

答えて

2

OrderOrderItemエンティティの間には1対1の関係があります。この場合、OrderIdOrderItemエンティティの主キーである必要があります。

また、エンティティの名前は、慣例によって複数ではなく単数で指定する必要があります。

その結果、あなたの実体はのようになります。

public class OrderItem 
{ 
    public int OrderId { get; set;} 

    public virtual Order Order { get; set; } 
} 

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

    public virtual OrderItem OrderItem { get; set; } 
} 

そしてOrderItemマッピング:

// Primary Key 
this.HasKey(m => m.OrderId); 

... 
this.HasRequired(m => m.Order) 
    .WithRequiredDependent(m => m.OrderItem); 
...