Я пытаюсь получить рабочий запрос EF 2.1 к существующей базе данных. Я получаю сообщение об ошибке, которое говорит о том, что я неправильно настроил свои модели.
Мои модели:
public class Job
{
public int JobId { get; set; }
public JobStatus JobStatus { get; set; }
}
public class JobStatus
{
[Key]
public string JobStatusId { get; set; }
public string Colour { get; set; }
public ICollection<Job> Jobs { get; set; }
}
Мой запрос:
var jobs = _context.Jobs
.GroupBy(p => p.JobStatus.Colour)
.Select(g => new { colour = g.Key, count = g.Count() });
Ошибка: "Недопустимое имя столбца" JobStatusId ". EF преобразуется в следующий запрос:
SELECT [p.JobStatus].[Colour] AS [colour], COUNT(*) AS [count]
FROM [Jobs] AS [p]
LEFT JOIN [JobStatus] AS [p.JobStatus] ON [p].[JobStatusId] = [p.JobStatus].[JobStatusId]
GROUP BY [p.JobStatus].[Colour]
Что не так. p.JobStatusId не существует, это должен быть p.JobStatus.JobStatusId. Что я делаю неправильно?
ОБНОВИТЬ
Я добавил это в свою модель работы;
public string JobStatusFK {get; set;}
И попробовал следующее:
modelBuilder.Entity<Job>().HasOne(x=>x.JobStatus).HasForeignKey(p => p.AuthorFK);
Однако Intellisense этого не позволяет:
'ReferenceNavigationBuilder<Job, JobStatus>' does not contain a definition for 'HasForeignKey' and no accessible extension method 'HasForeignKey' accepting a first argument of type 'ReferenceNavigationBuilder<Job, JobStatus>' could be found
Но мне не нужно это поле в классе должностей ....
Затем вы используете HasForeignKey в свободном API
вы следите за Database-First или Code-First?
Извините, я не понял, что это был FK
Пожалуйста, посмотрите мое обновление
@RobbieMills Я не уверен, почему public string JobStatusFK {get; set;} не работает. Но причину, по которой Intellisense не работает, можно решить с помощью этого ответа stackoverflow.com/questions/52310518/…





Это потому, что ваш Job : JobStatus принадлежит к Many-to-One.
EF считал, что существует внешний ключ, который ссылается на JobStatus, то есть столбец JobStatusId в Jobset как FK.
Хорошо, в этом есть смысл, как лучше всего это исправить? Это модель, которую я использую в приложении asp.net 5, которое там хорошо работает.
@RobbieMills Я видел комментарии @vivek nuna. На мой взгляд, внешний ключ будет иметь смысл. Не могли бы вы рассказать нам, почему вам не нужен столбец Job.JobStatusId, но в то же время есть свойство навигации JobStatus?
Ах, я не понимал, что это FK
@RobbieMills - то, с чем вы столкнулись, является одной из основных причин, по которой вы никогда не должны использовать свою модель данных в своем представлении. Ваша модель данных и ваша модель представления представляют собой разные проблемы и часто требуют разных определений. Вы можете решить эту проблему, используя вашу полностью заполненную модель данных (представляющую вашу базу данных) и проецируя ее в модель представления, которая не содержит данных, которые вам не нужны.
Вы должны убедиться, что JobStatusId - это FK в классе Job.
Вы можете использовать приведенное ниже объявление в классе Job или использовать HasForeignKey в классе DBContext с помощью свободного API.
public string JobStatusId { get; set; }
Я пробовал это, та же ошибка, после некоторого чтения я добавил код, который я описал в своем обновлении, но все еще не могу заставить его работать
Можете ли вы объявить
public string JobStatusId { get; set; }в классеJob