Blazor с Entity Framework Core - ошибка компиляции - PullRequest
0 голосов
/ 02 июля 2019

У меня есть следующие настройки, но я не могу завершить сборку, поскольку я получаю скрытую ошибку, связанную со строкой 439 в файле Blazor.MonoRuntime.targets (MSB3073).

Значит ли это, что Entity Framework Core никоим образом не будет работать с Blazor preview 6?

подробности:

  • Asp.net Hosted Blazor
  • AspNetCore.Blazor (3.0.0-preview6.19307.2)
  • Microsoft.EntityFrameworkCore (3.0.0-preview6.19304.10)
  • Microsoft.EntityFrameworkCore.Design (3.0.0-preview6.19304.10)
  • Microsoft.EntityFrameworkCore.SqlServer (3.0.0-preview6.19304.10)

Решено с помощью взломанного решения!

Каким-то образом мне удалось все решить и заставить вещи работать концы с концами. Я считаю, что большая, критическая вещь была:
* Убедитесь, что проекты клиента и сервера Blazor напрямую не ссылаются на Entity Framework
* Не позволяйте клиенту Blazor ссылаться (прямо или косвенно) на проект с созданными сущностями). Чтобы получить доступ к моделям, я просто создайте дубликат сгенерированных объектов (и удалите «частичное» из сгенерированных классов)

1 Ответ

1 голос
/ 02 июля 2019

Здесь необходимы некоторые пояснения, верно:

  • Вы не можете использовать Entity Framework в клиентском проекте Blazor.Entity Framework - это серверная технология.

  • Вы можете использовать Entity Framework в проекте сервера вашего приложения.

  • Связь между вашей клиентской стороной иХостинг на сервере обычно осуществляется через вызовы Http (служба HttpClient), но вы также можете использовать SignleR.

  • Чтобы включить вызовы Http, вы должны предоставить конечные точки маршрутизации Http ... Это можно включитьиспользуя Web Api с необходимыми конечными точками.Ваши открытые методы Web Api (методы контроллеров) могут обращаться к базе данных напрямую (или косвенно, если вы определяете репозитории, службы и т. Д.) Через объекты Entity Framework и возвращать запрашиваемые данные вызывающим методам (методы HttpClient).

Обратите внимание, что в своем ответе я особенно касаюсь клиентских приложений Blazor, но в основном это касается серверных приложений Blazor.Я могу просто добавить, что в серверных приложениях Blazor вам не нужно использовать Web Api, поскольку Blazor выполняется на сервере.В таком случае вы можете определить обычный сервис для извлечения данных из базы данных и передачи его вызывающим методам (здесь не задействован HttpClient).

  • Общий проект, предназначенный для хранения объектов, которые могут использоваться как внешним, так и внутренним интерфейсом.Это место, где вы можете определить свои объекты Model.Например, вы можете определить класс Employee, который можно использовать для извлечения данных и передачи их Клиенту в виде списка объектов Employee, а в Client вы можете определить список объектов Employee, в которых будут храниться полученные данные.Короче говоря, вам не нужно определять два типа объектов, один подходящий для сервера, а другой подходящий для клиента (скажем, ваш клиент - приложение Angular).

Надеюсь, это поможет..

...