ユーザー クラスを変更し、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 から継承されます。
継承された列をEntity Frameworkに認識させるにはどうすればよいですか?