簡體   English   中英

EF6 MVC5代碼優先遷移不適用於1個表/類

[英]EF6 MVC5 Code First Migrations not working for 1 Table/Class

我正在Visual Studio 2013中使用EF6和Code First遷移來構建MVC5項目。到目前為止,一切都按預期進行:多次遷移將多個表添加到數據庫中。 添加應該映射到新數據庫表的新類之后,add-migration將不會選擇新類,並且新的遷移文件將在Up()和Down()方法中不帶任何代碼的情況下生成。 所涉及的類非常簡單:

[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是父類,其db表是使用Code First生成的,SurveyItem類也是SurveyItem的父類。 下面是成功生成的其他代碼。

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; }
}

我所做的只是創建一個新項目,並從該項目中導入了我所有的模型,視圖和控制器(以及各種Content文件),構建了項目並啟用了遷移。 在初始遷移代碼中,SurveyItemOption類仍然被忽略。

請幫忙! 任何有關如何解決此問題的想法將不勝感激!

我敢肯定,對於為什么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; }
}

更新:似乎另一個要求是確保您也已在數據上下文中設置了DbSet。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM