2014-07-15 4 views
1

Итак, я считаю, что я испортил свои первоначальные модели и пропустил свойство ID и внешнего ключа. Entity Framework все это понял ... но теперь я хочу исправить свои модели, чтобы правильно отразить это.Добавить существующее значение столбца в качестве нового свойства на модели

Первоначально мои модели были: -

public Season 
{ 
    public int SeasonId {get; set;} 
    public int Year {get; set;} 

    public virtual ICollection<MatchFixture> MatchFixtures {get; set;} 
} 

public MatchFixture 
{ 
    public int MatchFixtureId {get; set;} 

    public int Round {get; set;} 
    public string HomeTeam {get; set;} 
    public string AwayTeam {get; set;} 
} 

Теперь я считаю, что я должен MatchFixture обладать свойствами, так что указывает на сезон, который содержит его, добавив следующие свойства MatchFixture.

public int SeasonId {get; set;} 
public Season Season {get; set;} 

Но проблема в том, что моя базе данных уже есть столбец в моем MatchFixtures под названием Season_SeasonId. Это столбец с нулевым числом, который, очевидно, поступает из моей коллекции в сезоне. Если бы у меня первоначально были свойства выше в MatchFixture, столбец просто назывался SeasonId и был бы не-nullable целым столбцом.

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

  1. Как я могу это сделать с помощью CodeFirst миграции? Должен ли я переименовать столбец и изменить его на непустую, и мы закончили?
  2. Должен ли я добавлять эти свойства? Я нахожу, что мой код еще проще перемещает «вверх по иерархии» (т. Е. Какой сезон в этом MatchFixture существует? MatchFixture.Season, но я чувствую, что это часть более серьезной проблемы, когда мое понимание Entity Framework мешает мне.

ответ

0

Вы можете сделать это за один шаг, но сначала вам нужно убедиться, что в базе данных нет NULL значения Season_SeasonId, если вам нужно что-то сделать, удалите его или установите внешний ключ значение.

Просто добавьте эти свойства на MatchFixture.

public int SeasonId { get; set; } 
public Season Season { get; set; } 

Затем включите, добавьте и запустите миграцию.

PM> Enable-Migrations 
PM> Add-Migration AddMatchFixtureFK 
PM> Update-Database 

Тогда у вас есть все, что вам нужно.

Если вы проверили миграцию AddMatchFixtureFK, метод Up будет иметь все необходимые шаги.

- Drop Foreign Key 
- Drop Index 
- Rename Column 
- Alter Column (to non null-able) 
- Create Index 
- Add Foreign Key 

Если вам нужно добавить эти свойства или нет, это было объяснено в this post. Но я обнаружил, что добавление этих свойств навигации (идентификатор и ссылка) упростит обработку данных и данные семян. Например, вы можете добавить новый MatchFixture в существующий Season, просто установив SeasonId.

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