2014-01-20 56 views
1

我正在Visual Studio 2013中使用EF6的Code First迁移构建MVC5项目。一切工作如预期一直到现在:多个迁移将多个表添加到我的D b。添加一个应该映射到新数据库表的新类后,添加迁移将不会选择新类,并且在Up()和Down()方法中没有代码生成新的迁移文件。有问题的类很简单,因为它可以:EF6 MVC5代码优先迁移不适用于1表/类

[Table("SurveyItemOption")] 
public class SurveyItemOption 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 
    public string Option { get; set; } 
    public virtual SurveyItem SurveyItem { get; set; } 
} 

正如你所看到的,我已经添加了DatabaseGenerated自己的属性,看看是否有什么差别,但它仍然没有拿起新类并创建新表。 SurveyITem是父类,它的数据库表是使用Code First生成的,就像SurveyItem的父级的Survey类一样。以下是成功生成的其他代码。

public enum ListType 
{ 
    None = 0, 
    Circle = 1, 
    Square = 2, 
    LowerAlpha = 3, 
    LowerLatin = 4, 
    LowerRoman = 5, 
    UpperAlpha = 6, 
    UpperLatin = 7, 
    UpperRoman = 8 
} 

[Table("Survey")] 
public class Survey 
{ 
    [Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public bool IsActive { get; set; } 
    public string Owner_UserId { get; set; } 
    public int Module_Id { get; set; } 
    public virtual IEnumerable<SurveyItem> Items { get; set; } 
} 

[Table("SurveyItem")] 
public class SurveyItem 
{ 
    public SurveyItem() { 
     this.OptionListType = ListType.None; 
    } 
    [Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 
    public string Item { get; set; } 
    public int Survey_Id { get; set; } 

    [EnumDataType(typeof(ListType))] 
    public ListType OptionListType { get; set; } 

    public virtual int OptionListTypeId 
    { 
     get 
     { 
      return (int)this.OptionListType; 
     } 
     set 
     { 
      this.OptionListType = (ListType)value; 
     } 
    } 

} 

[Table("SurveyAnswer")] 
public class SurveyAnswer 
{ 
    [Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 
    public string UserId { get; set; } 
    public string Answer { get; set; } 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Computed)] 
    public DateTime Created { get; set; } 

    public virtual SurveyItem SurveyItem { get; set; } 
} 

我尽可能创造一个新的项目去和进口的所有我的模型,视图和控制器从这个项目(连同各种内容的文件),建项目,并启用迁移。 SurveyItemOption类在初始迁移代码中仍然被忽略。

请帮忙!任何想法如何解决这个将非常感激!

+1

你的Data Context类是什么样的?在那里有一个DbSet 吗? – jessehouwing

+0

感谢您的回应!不,现在还没有DbSet。我在运行迁移之后添加了这些内容来创建新表。不过,我确实解决了这个问题。请参阅下面的答案。 – Silkster

回答

1

我确定有一个很好的技术解释,为什么这张表不是由Code First生成的,但我意识到SurveyItem,SurveyItemOption和SurveyAnswer(它存储了用户的答案)之间的关系中缺少一些东西。最初,我不打算包含项目选项,因此我只在SurveyItem和SurveyAnswer之间有关系。 SurveyAnswer对SurveyItem有一个外键,所以我的猜测是EF不喜欢我在不同的表上创建同样的关系。我也意识到SurveyAnswer需要SurveyItemOption的外键来存储SurveyItemOption作为答案。添加这种关系解决了我的问题。

[Table("SurveyAnswer")] 
public class SurveyAnswer 
{ 
    [Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 
    public string UserId { get; set; } 
    public string Answer { get; set; } 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Computed)] 
    public DateTime Created { get; set; } 

    public virtual SurveyItem SurveyItem { get; set; } 

    public virtual SurveyItemOption SurveyItemOption { get; set; } 
} 

UPDATE: 看来,另一个要求是要确保你有一个DbSet建立在数据方面,太。