我修改了用户类并在 Visual Studio 2012 的包管理器控制台中创建了数据迁移。数据迁移包括以下脚本:
CreateTable(
"dbo.Users",
c => new
{
Id = c.Int(nullable: false, identity: true),
Username = c.String(nullable: false),
Comment = c.String(),
EmailAddress = c.String(maxLength: 64),
Identifier = c.String(),
IsApproved = c.Boolean(nullable: false),
PasswordFailuresSinceLastSuccess = c.Int(nullable: false),
LastPasswordFailureDate = c.DateTime(),
LastActivityDate = c.DateTime(),
LastLockoutDate = c.DateTime(),
LastLoginDate = c.DateTime(),
ConfirmationToken = c.String(),
CreateDate = c.DateTime(),
IsLockedOut = c.Boolean(nullable: false),
LastPasswordChangedDate = c.DateTime(),
PasswordVerificationToken = c.String(),
PasswordVerificationTokenExpirationDate = c.DateTime(),
PersonId = c.Int(nullable: false),
OwnerId = c.Int(nullable: false),
EffectiveDate = c.DateTime(nullable: false),
ExpirationDate = c.DateTime(),
CreationDate = c.DateTime(nullable: false),
UpdatedDate = c.DateTime(nullable: false),
Creator = c.String(nullable: false),
Updater = c.String(nullable: false),
AlertConfiguration_Id = c.Int(),
})
.PrimaryKey(t => t.Id)
.ForeignKey("dbo.People", t => t.PersonId, cascadeDelete: false)
.ForeignKey("dbo.AlertConfigurations", t => t.AlertConfiguration_Id)
.Index(t => t.PersonId)
.Index(t => t.AlertConfiguration_Id);
运行迁移后,在数据库中成功创建了 User 表,并显示了所有列。但是,对数据库的后续查询会生成以下错误:
Exception Details: System.Data.SqlClient.SqlException: Invalid column name 'OwnerId'.
Invalid column name 'EffectiveDate'.
Invalid column name 'ExpirationDate'.
Invalid column name 'CreationDate'.
Invalid column name 'UpdatedDate'.
Invalid column name 'Creator'.
Invalid column name 'Updater'.
用户类继承自 AuditableClass,其定义如下:
public abstract class AuditableClass
{
public AuditableClass()
{
this.CreationDate = System.DateTime.Now;
}
[ScaffoldColumn(false)]
public int Id { get; set; }
[Required(ErrorMessage = "An owner ID is required")]
[ScaffoldColumn(false)]
public int OwnerId { get; set; }
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
[Display(Name = "Effective Date")]
[Required(ErrorMessage = "An effective date is required")]
[DataType(DataType.Date)]
public DateTime? EffectiveDate { get; set; }
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
[Display(Name = "Expiration Date")]
[DataType(DataType.Date)]
public DateTime? ExpirationDate { get; set; }
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
[Required(ErrorMessage = "An creation date is required")]
[ScaffoldColumn(false)]
public DateTime? CreationDate { get; set; }
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
[Required(ErrorMessage = "A last update date is required")]
[ScaffoldColumn(false)]
public DateTime? UpdatedDate { get; set; }
[Required(ErrorMessage = "An creator is required")]
[ScaffoldColumn(false)]
public string Creator { get; set; }
[Required(ErrorMessage = "A last updater is required")]
[ScaffoldColumn(false)]
public string Updater { get; set; }
}
这是用户类:
public class User : AuditableClass
{
[Required]
public virtual String Username { get; set; }
[DataType(DataType.MultilineText)]
public virtual String Comment { get; set; }
[Display(Name = "Email Address")]
[StringLength(64)]
public string EmailAddress { get; set; }
public string Identifier { get; set; }
public Boolean IsApproved { get; set; }
public int PasswordFailuresSinceLastSuccess { get; set; }
public DateTime? LastPasswordFailureDate { get; set; }
public DateTime? LastActivityDate { get; set; }
public DateTime? LastLockoutDate { get; set; }
public DateTime? LastLoginDate { get; set; }
public String ConfirmationToken { get; set; }
public DateTime? CreateDate { get; set; }
public Boolean IsLockedOut { get; set; }
public DateTime? LastPasswordChangedDate { get; set; }
public String PasswordVerificationToken { get; set; }
public DateTime? PasswordVerificationTokenExpirationDate { get; set; }
public virtual List<Role> Roles { get; set; }
public virtual List<myApp.Models.Parties.Org> AuthorizedOrgs { get; set; }
public virtual List<myApp.Models.Security.Permission> Permissions { get; set; }
public int PersonId { get; set; }
public virtual Person Person { get; set; }
}
System.Data.SqlClient.SqlException 的主题列都继承自 AuditableClass。
如何让实体框架识别继承的列?