2016-09-12 2 views
0

каждый раз, когда я пытался добавить-миграции, а затем он показывает мне код так:EF: 12:59 отношения без создания нового столбца с использованием FLUENT 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"); 
    } 

Я ищу Google и не нашли решение, моя сущность, понимает, что я хочу установить OrderId of orderItems в качестве ссылок на внешние ключи в Orders.

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:

 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») вызовет ошибку: Имя было установлено и его Должно быть уникальным. Благодарю.

+0

Whta разница между '' Id' и OrderId'? Если существует взаимно-однозначное отношение, тогда 'OrderId' должен быть PK. –

+0

@FarhadJabiev большое спасибо. Я установил OrderId как ключ, и он решил мою проблему. – MapleStory

+0

Хорошо, тогда позвольте мне добавить это как ответ. ИМХО, будет лучше, если вы также измените опцию «Необязательно» на «Обязательно» при сопоставлении FK. –

ответ

2

Вы сказали, что между Order и OrderItem существует взаимно однозначное отношение. Если это так, то OrderId должен быть первичным ключом в объекте OrderItem.

Кроме того, имена ваших сущностей должны быть названы в единственном числе, а не в множественном числе по соглашению.

В результате, ваши объекты должны выглядеть следующим образом:

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); 
... 
Смежные вопросы