Я получаю недопустимое исключение имени столбца при доступе к полю Entity - PullRequest
0 голосов
/ 31 декабря 2018

Недавно я добавил столбец с именем «CreatedBy» в таблицу «Курс», который ссылается на идентификатор пользователя в таблице пользователей в базе данных, и создал для нее соответствующее поле сущности.Но при доступе к полю CreatedBy я получаю сообщение об ошибке: System.Data.SqlClient.SqlException: недопустимое имя столбца 'CreatedByID'.

Я пробовал разные способы аннотации данных, но это не сработало.

Объекты:

public partial class Course
{
    public Course()
    {
        this.CourseLessons = new List<CourseLesson>();
    }

    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int CourseID { get; set; }
    public string CourseName { get; set; }
    public string CourseDescription { get; set; }        
    public int? CreatedByID { get; set; }

    [ForeignKey("CreatedByID")]
    public virtual WebsiteUser CreatedBy { get; set; }
    public virtual ICollection<CourseLesson> CourseLessons { get; set; }
}

public partial class WebsiteUser
{
    public WebsiteUser()
    {
        // Other code
    }
    [Key]
    public int UserID { get; set; }

    [Required]
    public string Name { get; set; }

    [Required]
    public string Email { get; set; }
}

public ActionResult EditCourse()
{
    SQLContext context = new SQLContext();
    var deletethis = context.Courses.First().CreatedBy;  // Gives error
    return View(context.Courses);
}

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

«CreatedByID» - это стандартное имя по умолчанию для столбца таблицы базы данных, соответствующее свойству CreatedByID, которое вы здесь отобразили как внешний ключ

public int? CreatedByID { get; set; }

[ForeignKey("CreatedByID")]
public virtual WebsiteUser CreatedBy { get; set; }

Чтобы изменить имя обычного столбца, вы можетеиспользуйте аннотацию данных [Column] (атрибут):

[Column("CreatedBy")]
public int? CreatedByID { get; set; }

или свободный API:

modelBuilder.Entity<Course>()
    .Property(e => e.CreatedById)
    .HasColumnName("CreatedBy");

Напомним, что атрибут ForeignKey указывает имя свойства объекта должен отображаться как столбец FK, а атрибут Column указывает имя столбца таблицы , сопоставленного с этим свойством.

0 голосов
/ 31 декабря 2018

Попробуйте использовать одинарную кавычку

'

вместо двойной кавычки

"

itработал для меня в базе данных Postgresql.

Например

[ForeignKey('CreatedByID')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...