2011-02-19 18 views
1

假设我有一个Post实体,并且我想将所有更改存储到发布对象,所以我也有一个PostHistory实体。现在我将历史定义为这样的:如何让一个实体的主键成为EF4代码优先的另一个实体?

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对象,因为我加了一个才没有帮帮我。

任何想法如何做到这一点?

回答

3
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 
} 
+0

啊我没有意识到有一个int PostId属性我可以做到这一点。尽管如此,如果我改变`Post`的主键类型,那会让事情变得混乱 – KallDrexx 2011-02-19 17:58:45

相关问题