Entity Framework generates an invalid column name

0

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?

.net
entity-framework-6
asked on Stack Overflow Jun 18, 2018 by Ivan Persiani • edited Jun 18, 2018 by Ivan Persiani

2 Answers

0

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);
0

I alter mapping object user for Credential property and work for me!

[NotMapped]
public virtual Credential Credential { get; set; }
answered on Stack Overflow Jul 13, 2018 by Ivan Persiani

User contributions licensed under CC BY-SA 3.0