修改了整个帖子.
我正试图通过Fiddler发布以下JSON POST请求:
{Username:"Bob", FirstName:"Foo", LastName:"Bar", Password:"123", Headline:"Tuna"}
Run Code Online (Sandbox Code Playgroud)
但是我收到了这个错误:
Message "Cannot insert the value NULL into column 'Id', table 'xxx_f8dc97e46f8b49c2b825439607e89b59.dbo.User'; column does not allow nulls. INSERT fails.\r\nThe statement has been terminated." string
Run Code Online (Sandbox Code Playgroud)
虽然如果我手动发送随机ID和请求,那么一切都很好.像这样:
{Id:"1", Username:"Bob", FirstName:"Foo", LastName:"Bar", Password:"123", Headline:"Tuna"}
Run Code Online (Sandbox Code Playgroud)
为什么实体框架不会生成并自动增加Id?我的POCO课程如下:
public class User
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public string Id { get; set; }
public string Username { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Password { get; …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的域模型中的 ASP.NET Core Identity 和实体之间实现良好的分离和架构。
我在使用 ASP.NET Core 构建的 Web 应用程序中使用洋葱架构。在核心项目中Domain,我有域模型,其中之一是Member实体。
然后在另一个项目中Infrastructure,我有内置的 ASP.NET Core Identity 设置,其中包含一个ApplicationUser从IdentityUser.
public class ApplicationUser : IdentityUser
{
}
Run Code Online (Sandbox Code Playgroud)
将身份用户和成员实体分开的想法很好。但是,我想将它们联系起来,但是使用 Entity Framework Core 这似乎是一个挑战。如果不在我的域模型中添加导航属性,我就无法解决这个问题,我想避免这种情况。
我希望我可以完全使用 Fluent API 来完成它,而不必添加属性,但情况似乎并非如此。
关于如何解决这个问题的任何建议?考虑到上述情况,如何在不添加核心项目依赖项的情况下在身份用户和域实体之间创建关系?
我的问题有点重复或与这里的一些帖子有关,例如
以及其他一些帖子。然而,这些问题的答案似乎是变通方法。也许这是唯一的方法?
我正在使用 ASP.NET Core 3.1 和 Entity Framework 3.1。对于这个项目。
c# onion-architecture asp.net-identity entity-framework-core asp.net-core
我正在使用ASP.NET MVC 5和Database-First工作流程.我创建了身份表(AspNetUsers,AspNetRoles等)在现有数据库但我有越来越的问题寄存器和登录功能正常工作.
这是IdentityModels.cs班级
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("MyConnectionString") // I use "MyConnectionString" instead of "DefaultConnection"
{
}
Run Code Online (Sandbox Code Playgroud)
这就是EF连接字符串的web.config样子
<connectionStrings><add name="MyConnectionString" connectionString="metadata=res://*/Entities.MyModel.csdl|res://*/Entities.MyModel.ssdl|res://*/Entities.MyModel.msl;provider=System.Data.SqlClient;provider connection string="data source=My-Pc\SQLEXPRESS;initial catalog=MyExistingDatabase;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
Run Code Online (Sandbox Code Playgroud)
为了更好地衡量,这里是从edmx生成的上下文类
public partial class MyConnectionString : DbContext
{
public MyConnectionString()
: base("name=MyConnectionString")
{
}
Run Code Online (Sandbox Code Playgroud)
对我来说似乎都很好,它应该能够在数据库中创建用户但是我在登录或尝试分别注册时遇到以下错误:
登录:
实体类型ApplicationUser不是当前上下文的模型的一部分
第73行:var result = await SignInManager.PasswordSignInAsync(model.Email,model.Password,model.RememberMe,shouldLockout:false);
异常详细信息:System.InvalidOperationException:实体类型ApplicationUser不是当前上下文的模型的一部分.
注册:
实体类型ApplicationUser不是当前上下文的模型的一部分
第155行:var result = await UserManager.CreateAsync(user,model.Password);
异常详细信息:System.InvalidOperationException:实体类型ApplicationUser不是当前上下文的模型的一部分.
大多数文章似乎都集中在Code-First以及如何从LocalDb转到SQLExpress等以及如何更改连接字符串,但是我无法在很长一段时间内解决这个问题.
编辑,解决方案:正如@ChrFin所提到的,你可以将它们并排使用,这就是我最终要做的事情.我只是添加了一个新的 …
我使用配置了个人帐户登录的 React 模板创建了一个 ASP.NET Core 3.0 应用程序。
从那时起,我将它升级到 3.1 版,一切都可以编译和构建。
但是,在运行时,我在默认控制器中收到以下错误OidcConfigurationController:
System.InvalidOperationException
HResult=0x80131509
Message=Client 'MyApp' not found.
Source=Microsoft.AspNetCore.ApiAuthorization.IdentityServer
StackTrace:
at Microsoft.AspNetCore.ApiAuthorization.IdentityServer.ClientCollection.get_Item(String key)
at Microsoft.AspNetCore.ApiAuthorization.IdentityServer.DefaultClientRequestParametersProvider.GetClientParameters(HttpContext context, String clientId)
at MyApp.Web.Controllers.OidcConfigurationController.GetClientRequestParameters(String clientId) in C:\Users\Baha\source\repos\MyApp\src\Web\Controllers\OidcConfigurationController.cs:line 22
at Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(Object target, Object[] parameters)
at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.SyncActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeActionMethodAsync()
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeNextActionFilterAsync()
Run Code Online (Sandbox Code Playgroud)
clientId控制器中的参数来自 React 文件,特别ApiAuthorizationConstants.js是变量ApplicationName.
我对此有点迷茫,但是使用带有 3.1 的 React 模板创建一个新项目运行良好。
有没有人经历过这个或一些提示从这里去哪里?