Как можно, чтобы первичный ключ одного объекта был другим объектом в коде EF4 первым? - PullRequest
1 голос
/ 19 февраля 2011

Скажем, у меня есть объект Post, и я хочу сохранить все изменения в объектах публикации, поэтому у меня также есть объект PostHistory. Прямо сейчас я бы определил историю как-то так:

public class PostHistory
{
   public virtual Post Post { get; set; }

   //... properties of the posthistory object
}

Проблема в том, что я не могу понять, как заставить это работать с EF4 Code-First. Сначала построение модели завершается неудачно, поскольку для PostHistory не определен первичный ключ. Так что в моем контексте я называю

modelBuilder.Entity<PostHistory>().HasKey(x => x.Post);

И возникает следующее исключение:

System.MissingMethodException: No parameterless constructor defined for this object..

Это исключение не говорит о том, что у объекта PostHistory нет конструктора без параметров, потому что я добавил его, и это не помогло.

Есть идеи, как этого добиться?

1 Ответ

3 голосов
/ 19 февраля 2011
public class Post {
    [Key, DatabaseGenerated(DatabaseGenerationOption.Identity)]
    public int Id { get; set; }

    public virtual ICollection<PostHistory> Histories { get; set; }
}

public class PostHistory {
    [Key, DatabaseGenerated(DatabaseGenerationOption.Identity)]
    public int Id { get; set; }

    public int PostId { get; set; }
    public virtual Post Post { get; set; }

   //... properties of the posthistory object
}
...