1

У меня есть эту модельвнешнего ключа Entity Framework 6.1 Code First создать ненужным столбец

public class Event { 
    [Key] 
    public int Id { get; set; } 

    public string Title { get; set; } 
} 

public class EventAction { 
    [Key] 
    public int Id { get; set; } 

    public int EventId { get; set; } 

    [ForeignKey("EventId")] 
    public Event Event { get; set; } 

    public int? RelatedEventId { get; set; } 

    [ForeignKey("RelatedEventId")] 
    public Event RelatedEvent { get; set; } 
} 

Когда я генерировать код первой миграции, он пытается добавить новую Event_Id колонку вместо того, чтобы использовать мой RelatedEventId, даже если я поставил ForeignKey, чтобы указать поле для использования.

Это не первый раз, когда я определяю несколько внешних ключей, которые ссылаются на одну и ту же таблицу, но я никогда раньше не сталкивался с этой проблемой.

Вот код переноса генерируется

public override void Up() { 

    AddColumn("dbo.EventActions", "Event_Id", c => c.Int()); 
    AddColumn("dbo.EventActions", "RelatedEventId", c => c.Int()); 
    CreateIndex("dbo.EventActions", "Event_Id"); 
    CreateIndex("dbo.EventActions", "RelatedEventId"); 
    AddForeignKey("dbo.EventActions", "Event_Id", "dbo.Events", "Id"); 
    AddForeignKey("dbo.EventActions", "RelatedEventId", "dbo.Events", "Id"); 

} 
+0

Это первая миграция или вы меняете существующую схему? – dotctor

+0

@dotctor, я меняю существующую схему. Я добавляю новую колонку RelatedEventId в EventAction –

+0

Можете ли вы поделиться сгенерированным кодом миграции? – dotctor

ответ

0

я, наконец, нашел проблему. Для простоты я пропустил, чтобы включить весь мой класс Event, а также проблема была на EventAction.

Таким образом, недостающий кусок в классе Event представляет собой коллекцию до EventAction.

public class Event { 
    [Key] 
    public int Id { get; set; } 

    public string Title { get; set; } 

    //this line was missing in my original post 
    //and that's the one that was confusing entity framework 
    public ICollection<EventAction> Actions { get; set; } 

} 

EventAction класс содержит два свойства с Event типа. Структура Entity должна знать, с кем мы хотим привязываться.

Чтобы сделать это, нам нужно, с аннотацией, добавить [InverseProperty("Event")] на свойство коллекции. Здесь «Событие» относится к имени свойства, а не типу.

Используя Fluent API, вы должны использовать версию перегрузки WithMany(d => d.Actions) при определении внешнего ключа.

 Смежные вопросы

  • Нет связанных вопросов^_^