Я впервые пробовал EF Core и закодировал очень простое приложение MVC, чтобы мои ноги были мокрыми. Я использую метод для посева базы данных, найденной в проекте UnicornStore, где они пишут код в Startup.cs
, чтобы перенести базу данных, а затем запустить семенной метод.
Прежде чем вызвать метод семени, они запускают этот метод расширения DbContext
, чтобы проверить, были ли применены все миграции:
using System;
using System.Linq;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
namespace UnicornStore.Models
{
public static class DbContextExtensions
{
public static bool AllMigrationsApplied(this DbContext context)
{
var applied = context.GetService<IHistoryRepository>()
.GetAppliedMigrations()
.Select(m => m.MigrationId);
var total = context.GetService<IMigrationsAssembly>()
.Migrations
.Select(m => m.Key);
return !total.Except(applied).Any();
}
}
}
Я поместил этот же метод в свое приложение, и все работает - компилируется код и база данных переносится и высевается. Однако Visual Studio (2017 Enterprise) красная, подчеркивающая эту строку:
context.GetService<IMigrationsAssembly>()
.Migrations
.Select(m => m.Key);
Если я навешиваю над красной линией, это говорит мне:
Модуль 'System.Private.CoreLib, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = foo 'должно быть указано
Может ли кто-нибудь сказать мне, почему я получаю это сообщение? Я действительно попытался добавить ссылку на System.Private.CoreLib
, чтобы узнать, что произойдет, и это вызвало массу ошибок (undefined System.Object
и т.д.). Мне никогда не нравится оставлять такие вещи, как это нерешенное, если они вернутся, чтобы укусить меня позже, так что любое разрешение (или подтверждение того, что я могу оставить это и проигнорировать сообщение) будет оценено!