Почему entity framework ссылается на столбец, который даже не существует?

#c# #entity-framework #c#-4.0 #entity-framework-6 #ef-code-first

#c# #entity-framework #c #-4.0 #entity-framework-6 #ef-code-first

Вопрос:

Мой проект выдает ошибку

Недопустимое имя столбца ‘InitialsID_InitialsID’.

 public User ValidateUser(string Username, string Password)
{
    return uow.UserRepository.GetQueryable().Where(x => x.UserName == Username amp;amp; x.Password == Password).FirstOrDefault();
}
 

Даже во всем решении нет столбца с таким именем.

Я сгенерировал сценарий миграции, и в нем было это имя, но я изменил его на InitialsID, но он все равно запрашивает то же имя.

Как мне это решить? Я попытался ввести атрибут ForeignKey и т. Д., Но ничего не работает.

User.cs

 public class User
{
    public int UserID { get; set; }
    public int UserGroupID { get; set; }
    public UserGroup UserGroup { get; set; }
    public string UserName { get; set; }
    public string FullName { get; set; }
    public string Email { get; set; }
    public string Designation { get; set; }
    public string Password { get; set; }
    public bool? PasswordExpire { get; set; }
    public DateTime? ExpiryDate { get; set; }
    public bool Status { get; set; }
    public DateTime? CreatedOn { get; set; }
    public string CreatedBy { get; set; }
    public DateTime? ModifiedOn { get; set; }
    public string ModifiedBy { get; set; }

    public string Office { get; set; }

    public string Station { get; set; }

    public Initials InitialsID { get; set; }
}
 

Initials.cs

 public class Initials
{
    public short InitialsID { get; set; }
    public string Code { get; set; }
}
 

Я использую подход Code First.

Комментарии:

1. Вы используете подход code first?

2. да, подход CF

3. Возможно, я ошибаюсь, но разве публичные инициалы InitialsID { get; set; } не должны быть скорее публичными виртуальными инициалами Initialsid { get; set; } и добавить еще одно свойство public short InitialsID {get;set;}

4. @PiotrWojsa: привет, это сработало. Но не знаю, почему виртуальный сделал трюк.

Ответ №1:

Проблема в вашей конфигурации внешнего ключа. Когда вы ссылаетесь на свойство навигации public Initials InitialsID { get; set; } , EF добавляет неявный внешний ключ для этого свойства навигации, и это по соглашению navigationPropery_navigationPropertyPrimaryKey , и, следовательно, это InitialsID_InitialsID

Если вам действительно нужно public Initials Initials { get; set; } свойство navigaation в User классе модели, запишите конфигурацию внешнего ключа следующим образом:

 public class User
{
    public int UserID { get; set; }
    public int UserGroupID { get; set; }

    ......................

    public short InitialsId { get; set; }
    public Initials Initials { get; set; }
}
 

Ответ №2:

Кажется, ваша база данных не перенесена с помощью новой модели или нового свойства models, просьба перенести вашу базу данных. Если вы используете ядро dotnet, в cmd введите папку проекта:

 dotnet ef migrations add [name]
 

и затем:

 dotnet ef databae update