J'ai modifié la classe d'utilisateurs et créé une migration de données dans la console du gestionnaire de packages de Visual Studio 2012. La migration de données inclus le script suivant:Les requêtes échouent avec des erreurs de "colonne non valide" après l'exécution des migrations de données EF5 vers une base de données SQL Azure
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);
Après l'exécution de la migration, la table utilisateur est créé avec succès dans la base de données avec toutes les colonnes indiquées. Cependant, les requêtes ultérieures à la base de données génèrent les erreurs suivantes:
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'.
La classe utilisateur hérite de AuditableClass, qui est défini comme suit:
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; }
}
Voici la classe utilisateur:
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; }
}
Les colonnes qui font l'objet de l'exception System.Data.SqlClient.SqlException sont toutes héritées de AuditableClass.
Comment puis-je obtenir que Entity Framework reconnaisse les colonnes héritées?
Mise à jour - j'ai supprimé la relation héritée et les erreurs persistent, même si les pas des colonnes « invalides » ont plus des attributs correspondants dans l'utilisateur classe. – spadelives