我在VS2015中使用EF6,並且有許多成功的遷移,因爲我一直在開發 - 直到現在。 我對錶進行了更改以指定外鍵並運行添加遷移。我驚訝地發現,不僅是我期望的更改,而且許多現有的具有字符串字段的表也被修改。EF6代碼第一次添加遷移創建不尋常的遷移,但應用程序運行
我將對外鍵的更改反轉,但字符串字段更改仍包含在遷移中。應用程序運行正常,因此數據庫和模型似乎同步,但這種奇怪的遷移仍然存在。
的表被改變都是基於以下接口和類上:
public interface IModificationHistory
{
DateTime? DateModified { get; set; }
DateTime? DateCreated { get; set; }
string UserName { get; set; }
}
public class ModificationHistory : IModificationHistory
{
[JsonIgnore]
[Display(Name = "Date modified")]
public DateTime? DateModified { get; set; }
[JsonIgnore]
[Display(Name = "Date created")]
public DateTime? DateCreated { get; set; }
[JsonIgnore]
[DataType(DataType.Text), MaxLength(256)]
[Display(Name = "User name")]
public string UserName { get; set; }
}
一個例子是
public class Organisation : ModificationHistory
{
[Key]
public int Id { get; set; }
[Required]
[DataType(DataType.Text), MaxLength(10)]
[Display(Name = "Code")]
public string Code { get; set; }
[Required]
[DataType(DataType.Text), MaxLength(255)]
[Display(Name = "Name")]
public string Name { get; set; }
}
現在新移民突然想改變字符串的長度,並忽略MaxLength(256)屬性。這發生在所有具有此指定繼承的表中。
它看起來像這樣:
public override void Up()
{
//snip
AlterColumn("dbo.Organisation", "UserName", c => c.String());
//snip
}
我很茫然,什麼造成了這樣或如何找到如何停止遷移使得這種奇怪的變化 - 任何線索?
更多有趣的信息。
我用奇怪的遷移更新了數據庫,然後發現有一個模型錯誤,應用程序無法運行。我必須從用戶名字段中刪除MaxLength屬性,然後一切正常。
重新添加屬性並擺弄MaxLength不會產生任何新的遷移 - 看起來該屬性被忽略,但只有在該表從這個類繼承的地方。
很明顯,我已經改變了一些事情來做到這一點,但做了一個提交Git,並有一個很好看的文件更改仍然沒有給我任何線索。
又是什麼在'Down'方法產生? –
它將長度限制放回:AlterColumn(「dbo.Organisation」,「UserName」,c => c.String(maxLength:256)); – OzTrak
這絕對是奇怪的,不能用乾淨的測試複製。任何在這裏沒有顯示的特殊代碼 - 比如「OnModelCreating」,基於接口進行通用流暢配置等等。必須有其他的東西導致它。 –