Entity Framework, ASP.NET, отсутствует контекст - PullRequest
2 голосов
/ 12 марта 2019

Я здесь новичок (и все еще начинающий программист), извините, если я спрашиваю неправильно или глупо ... Я пытаюсь пройтись по книге Троелсена Pro C # 7 с .NET и .NET Core, но язастрял в начале главы 29. Основная цель - создать решение ASP.NET MVC (названное CarLotMVC).Как было сказано в книге, я создал проект ASP, а затем пытаюсь вставить два других проекта (AutoLotDAL и AutoLotDAL.Models).Я делаю так, как написано в книге, но когда я пытаюсь добавить новый контроллер в проект ASP, я не вижу контекст, а вижу только классы моделей проектов ASP.Я загрузил исходный код, добавил в решение проекты AutoLotDAL и AutoLotDAL.Models, изменил строки подключения, пространства имен, но по-прежнему не вижу контекст или классы модели.

Строительные лесаменю - отсутствующие модели

Что может быть не так?В проекте AutoLotDAL есть классы миграции, я пытался удалить базу данных и создать заново, но это не помогло.Попробуйте запустить Visual Studio с администратором, очистить решение и собрать заново.Я видел только один раз контекст, в решении было несколько ошибок, VS создал класс Controller без моей помощи, но когда я открыл его позже, решение исчезло.

это контекст:

public partial class AutoLotEntities : DbContext
{
    public AutoLotEntities()
        : base("name=AutoLot")
    {
    }

    protected override void Dispose(bool disposing)
    {
    }

    private void OnSavingChanges(object sender, EventArgs eventArgs)
    {
        var context = sender as ObjectContext;
        if (context == null) return;
        foreach (ObjectStateEntry item in
            context.ObjectStateManager.GetObjectStateEntries(EntityState.Modified | EntityState.Added))
        {
            if ((item.Entity as Inventory) != null)
            {
                var entity = (Inventory)item.Entity;
                if (entity.Color == "Red")
                {
                    item.RejectPropertyChanges(nameof(entity.Color));
                }
            }
        }

    }

    private void OnObjectMaterialized(object sender, ObjectMaterializedEventArgs e)
    {
    }

    public virtual DbSet<CreditRisk> CreditRisks { get; set; }
    public virtual DbSet<Customer> Customers { get; set; }
    public virtual DbSet<Inventory> Cars { get; set; }
    public virtual DbSet<Order> Orders { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Inventory>()
            .HasMany(e => e.Orders)
            .WithRequired(e => e.Car)
            .WillCascadeOnDelete(false);
    }
}

Это строка подключения:

<connectionStrings> <add name="AutoLot" connectionString="data source=(local)\SQLEXPRESS;initial catalog=AutoLot;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" /> </connectionStrings>    

Я использую VS Community 2017, .NET Framework 4.6.1, EF 6.2.0, обновил все пакеты NuGet.Но все еще не могу воспроизвести решение в книге ... Пожалуйста, помогите.

Список литературы: Ветвь литературы

Ответы [ 2 ]

1 голос
/ 09 мая 2019

Я нашел способ обойти это, скопировав раздел в файле CarLotMVC.csproj из решения книги в мой проект.

Начните с перехода к .. \ pro-csharp-7-master \ Chapter_29\ CarLotMVC \ CarLotMVC в коде решения книги и открыв файл CarLotMVC.csproj в текстовом редакторе.

Найдите следующий элемент и скопируйте его в буфер обмена:

  <ItemGroup>
    <ProjectReference Include="..\AutoLotDAL.Models\AutoLotDAL.Models.csproj">
      <Project>{9a917d7c-885e-4d9a-818f-9955871a4fbb}</Project>
      <Name>AutoLotDAL.Models</Name>
    </ProjectReference>
    <ProjectReference Include="..\AutoLotDAL\AutoLotDAL.csproj">
      <Project>{7e5a8812-c303-4ae0-a6e7-4ac96ec11624}</Project>
      <Name>AutoLotDAL</Name>
    </ProjectReference>
  </ItemGroup>

ПодтвердитеGuid проекта совпадает с guid в ваших проектах AutoLotDAL и AutoLotDAL.Models, открыв AutoLotDAL.csproj в проекте AutoLotDAL и AutoLotDAL.Models.csproj в AutoLotDAL.csproj и сравнив теги ProjectGuid со значениями, указанными в элементе, скопированном изРешение книги.

Ниже приведена строка № 7 из моего AutoLotDAL.csproj:

<ProjectGuid>{7E5A8812-C303-4AE0-A6E7-4AC96EC11624}</ProjectGuid>

Перейдите в каталог вашего проекта с тем же файлом и откройте его вТекстовый редактор.Найдите следующий блок (строка № 185 в моем файле):

  <ItemGroup>
    <Folder Include="App_Data\" />
    <Folder Include="Models\" />
  </ItemGroup>

и вставьте элемент из файла решения после него.

Теперь найдите следующие элементы в тот же файл (строка № 49 в моем файле):

    <Reference Include="AutoLotDAL">
      <HintPath>..\AutoLotDAL\bin\Debug\AutoLotDAL.dll</HintPath>
    </Reference>
    <Reference Include="AutoLotDAL.Models">
      <HintPath>..\AutoLotDAL.Models\bin\Debug\AutoLotDAL.Models.dll</HintPath>
    </Reference>

и закомментируйте или удалите строки.

Сохраните файл и попробуйте снова добавить контроллер.У меня проект работал с этими изменениями.

0 голосов
/ 12 марта 2019

Кроме того, добавив AutoLotDAL и проект AutoLotDAL.Models к решению, вы должны добавить ссылку на эти проекты в проекте CarLotMVC.Вы можете найти документацию по этой теме здесь .

После этого вам нужно перекомпилировать ваш проект.Если он компилируется без ошибок, вы должны увидеть классы Context и Model в диалоге scaffolding.

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