I have a problem with mapping some tables with Entity Framework. I'm using a code first approach on an existing database.
In my datamodel I have
modelBuilder.Entity<Credential>()
.HasRequired(e => e.User)
.WithMany()
.HasForeignKey(e => e.ID_User).WillCascadeOnDelete(false);
In User domain model I have
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public User()
{
CommentsInsertUser = new HashSet<Comment>();
CommentsUpdateUser = new HashSet<Comment>();
CondosInsertUser = new HashSet<Condo>();
CondosUpdateUser = new HashSet<Condo>();
ContentsInsertUser = new HashSet<Content>();
ContentsUpdateUser = new HashSet<Content>();
//Credentials = new HashSet<Credential>();
Flats = new HashSet<Flat>();
Flats1 = new HashSet<Flat>();
Flats2 = new HashSet<Flat>();
Flats3 = new HashSet<Flat>();
Logs = new HashSet<Log>();
Menus = new HashSet<Menu>();
Menus1 = new HashSet<Menu>();
Stairs = new HashSet<Stair>();
Stairs1 = new HashSet<Stair>();
// UserInfos = new HashSet<UserInfo>();
UserInfos1 = new HashSet<UserInfo>();
UserInfos2 = new HashSet<UserInfo>();
Roles = new HashSet<Role>();
}
[Key]
public long ID_Users { get; set; }
[Required]
[StringLength(50)]
public string Account { get; set; }
[Required]
[StringLength(100)]
public string Name { get; set; }
[Required]
[StringLength(150)]
public string LastName { get; set; }
[Required]
[StringLength(200)]
public string Email { get; set; }
[Required]
[StringLength(500)]
public string Andress { get; set; }
[Required]
[StringLength(150)]
public string City { get; set; }
public int ID_Province { get; set; }
public int ID_Region { get; set; }
[Required]
[StringLength(50)]
public string PostalCode { get; set; }
public DateTime? Birthday { get; set; }
public long? ID_User_Insert { get; set; }
[Required]
public DateTime DTInsert { get; set; }
public long? ID_User_Update { get; set; }
public DateTime? DTUpdate { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Comment> CommentsInsertUser { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Comment> CommentsUpdateUser { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Condo> CondosInsertUser { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Condo> CondosUpdateUser { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Content> ContentsInsertUser { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Content> ContentsUpdateUser { get; set; }
public virtual Credential Credential { get; set; }
In Credential domain model I have
public partial class Credential
{
[Key]
public int ID_Credentials { get; set; }
public long ID_User { get; set; }
[Required]
[StringLength(100)]
public string Password { get; set; }
public Guid? SessionKey { get; set; }
public Guid? RecoveryKey { get; set; }
[StringLength(150)]
public string SecretQuestion { get; set; }
[StringLength(150)]
public string SecretAnswer { get; set; }
[Required]
public DateTime DTInsert { get; set; }
public DateTime? DTUpdate { get; set; }
public virtual User User { get; set; }
}
When I perform read operations on the User
table, I get the following error:
System.Data.SqlClient.SqlException (0x80131904): Invalid column name 'Credential_ID_Credentials'.
in System.Data.SqlClient.SqlCommand.<>c.b__180_0(Task`1 result)
in System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke()
in System.Threading.Tasks.Task.Execute()--- Fine traccia dello stack da posizione precedente dove è stata generata l'eccezione ---
in System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
in System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
in System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.d__c.MoveNext()
Honestly I can not understand where I'm wrong in the mapping; can someone more knowledgeable help me?
I think your relation map is wrong, can you try the following code
modelBuilder.Entity<Credential>()
.HasRequired<User>(s => s.ID_User)
.WithMany(g => g.Credentials)
.HasForeignKey<long>(s => s.ID_User).WillCascadeOnDelete(false);
I alter mapping object user for Credential property and work for me!
[NotMapped]
public virtual Credential Credential { get; set; }
User contributions licensed under CC BY-SA 3.0