Я не могу понять, как заставить Breeze возвращать метаданные, когда я использую IdentityDbContext
Мой контекст выглядит следующим образом
public partial class MyContext : IdentityDbContext<ApplicationUser, ApplicationRole, string>
{
public MyContext(DbContextOptions options) : base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<ApplicationUser>().HasMany(u => u.Claims).WithOne().HasForeignKey(c => c.UserId).IsRequired().OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity<ApplicationUser>().HasMany(u => u.Roles).WithOne().HasForeignKey(r => r.UserId).IsRequired().OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity<ApplicationRole>().HasMany(r => r.Claims).WithOne().HasForeignKey(c => c.RoleId).IsRequired().OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity<ApplicationRole>().HasMany(r => r.Users).WithOne().HasForeignKey(r => r.RoleId).IsRequired().OnDelete(DeleteBehavior.Cascade);
}
}
В моих службах ConfigureServices:
// add identity
services.AddIdentity<ApplicationUser, ApplicationRole>()
.AddEntityFrameworkStores<MyContext>()
.AddDefaultTokenProviders();
Мой контроллер по умолчанию:
[Route("breeze/[action]")]
[BreezeQueryFilter]
public class DefaultController : Controller
{
private readonly NyContext _context;
private readonly UnitOfWork _unitOfWork;
private readonly MyPersistenceManager _persistenceManager;
// called via DI
public DefaultController(MyContext context)
{
_context = context;
_unitOfWork = new UnitOfWork(context);
_persistenceManager = new MyPersistenceManager(context);
}
[HttpGet]
public IActionResult Metadata()
{
return Ok(_persistenceManager.Metadata());
}
[HttpPost]
public SaveResult SaveChanges([FromBody] JObject saveBundle)
{
return _unitOfWork.Commit(saveBundle);
}
}
Когда я выполняю и проверяю так:
http://localhost:3333/Breeze/MetaData
Я получаю следующую ошибку:
{"$ id": "1", "$ type": "Breeze.AspNetCore.ErrorDto, Breeze.AspNetCore.NetCore", "Code": 0, "Message": "Ссылка на объект не установлена для экземпляраобъекта. "," StackTrace ":" в Breeze.Persistence.EFCore.MetadataBuilder.BuildAssocName (INavigation prop) в C: \ git \ Breeze \ breeze.server.net \ AspNetCore \ Breeze.Persistence.EFCore \ MetadataBuilcs.: строка 138 \ r \ n в Breeze.Persistence.EFCore.MetadataBuilder.CreateNavProperty (INavigation p) в C: \ git \ Breeze \ breeze.server.net \ AspNetCore \ Breeze.Persistence.EFCore \ MetadataBuilder.cs: строка 128 \r \ n в System.Linq.Enumerable.WhereSelectEnumerableIterator 2.ToList()\r\n at System.Linq.Enumerable.ToList[TSource](IEnumerable
1 source) \ r \ n в Breeze.Persistence.EFCore.MetadataBuilder.CreateMetaType (IEntityType et, словарь 2 dbSetMap) in C:\\git\\Breeze\\breeze.server.net\\AspNetCore\\Breeze.Persistence.EFCore\\MetadataBuilder.cs:line 89\r\n at System.Linq.Enumerable.WhereSelectEnumerableIterator
2.ToList () \ r \ n в System.Linq.Enumerable.ToList [TSource] (IEnumerable 1 source)\r\n at Breeze.Persistence.EFCore.MetadataBuilder.GetMetadataFromContext(DbContext dbContext) in C:\\git\\Breeze\\breeze.server.net\\AspNetCore\\Breeze.Persistence.EFCore\\MetadataBuilder.cs:line 21\r\n at Breeze.Persistence.EFCore.EFPersistenceManager
1.BuildJsonMetadata () в C: \ git \ Breeze \ breeze.server.net \ AspNetCore \ Breeze.Persistence.EFCore \ EFPersistenceManager.cs: строка 109 \ r \ n в Breeze.Persistence.PersistenceManager.Metadata () в C: \ git \ Breeze \ breeze.server.net \ AspNetCore \ Breeze.Persistence\ PersistenceManager.cs: строка 34 \ r \ n в DictionaryPortalServer.Controllers.DefaultController.Metadata () в C: \ Users \ MrTou \ Documents \ Visual Studio 2017 \ Проекты \ Словарь проекта \ DP Server \ DictionaryPortalServer \ Controllers \ DefaultController.cs: строка 32 \ r \ n в lambda_method (Closure, Object, Object []) \ r \ n в Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute (Объектная цель, параметры Object []) \ r \ n в Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__12.MoveNext () \ r \ n --- Конец трассировки стека из предыдущего расположения, где было сгенерировано исключение --- \ r \ n в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw ()\ r \ n в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача) \ r \ n в Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__10.MoveNext () \ r \ n --- Конец трассировки стека изпредыдущее местоположение, где было сгенерировано исключение --- \ r \ n в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () \ r \ n в Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow (контекст ActionExecutedContext) \ r \ n вMicrosoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next (State & next, Область и область действия, Объект и состояние, Boolean & isCompleted) \ r \ n в Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__14.MoveNext () \ r \ n--- Конец трассировки стека из предыдущего расположения, в котором было сгенерировано исключение --- \ r \ n в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () \ r \ n в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (задача задачи) \r \ n в Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.d__23.MoveNext () "," EntityErrors ": null}
Я знаю, что мой контекст работает, потому что, если я использую другой контроллер для получения таких данных:
http://localhost:3333/breeze/Summary/CartOrders
Я получаю данные обратно.Только когда я пытаюсь получить метаданные, я получаю сообщение об ошибке.
Похоже, что Breeze не может сгенерировать метаданные из-за
ApplicationUser и ApplicationRole
Может кто-нибудь указать мне правильное направление?
Спасибо !!