[英]Storing DateTime property instead of byte array in SQL table using Code-First MVC5 EF6
[英]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.