我是Entity Framework和C#/.Net的新手,正在尝试创建一个TPH继承模型,我不确定是否应该这样做,所以如果不是,请给我建议,
这是一个模型:
public abstract class Vote
{
public int VoteID { get; set; }
public int UserID { get; set; }
public bool Value { get; set; }
public DateTime DateCreated { get; set; }
public User User { get; set; }
}
public class ProjectVote_ : Vote
{
public int ProjectID { get; set; }
public virtual Project Project { get; set; }
}
public class CommentVote_ : Vote //There are three more like this, votes for different hings
{
public int CommentID { get; set; }
public virtual Comment Comment { get; set; }
}现在项目模型(注释和模型类似)
public class Project
{
public int ProjectID { get; set; }
public string Title { get; set; }
public virtual ICollection<Vote> Vote { get; set; }
}发生的情况是,ICollection创建了一个数据库列Project_ProjectID作为投票表(我认为)中的外键,而不是使用我定义的ProjectID。我如何修复它,或者我应该以不同的方式对其进行建模。如果fluent API是修复它的方法,我不知道该怎么做。
最后,我希望能够使用一个表来存储5种不同类型的投票。
发布于 2013-01-10 10:46:04
如果有相关实体,则不需要具有属性来将FK存储在模型中。当实体框架检测到您的ProjectVote_模型中的项目时,它知道需要对ProjectVote中的Project表进行FK。User、UserId、Comment和CommentId也是如此。您不需要在模型中具有存储FK的属性。
您将获得名称为"Project_ProjectID“的FK列,因为实体框架检测到它需要为导航属性”项目“创建一个FK。它使用自己的命名约定来创建列,因此是"Project_ProjectID“。
如果希望为列提供自己的名称,请在DBContext类中重写OnModelCreating并添加这个流畅的映射。
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Project>()
.HasMany(p => p.Vote)
.HasRequired(v => v.Project) //or .WithOptional(v => v.Project)
.Map(m => m.MapKey("ProjectId")); //or any other name you want.
}例如,对于未来的this is a helpful reference for how to use the Fluent API.,这里有一些关于如何使用fluent自定义TPH的documentation。
希望这能有所帮助!
https://stackoverflow.com/questions/14248410
复制相似问题