如何解决为什么必需的 IdentityUser 属性会导致可为空的数据库字段?
我想要求特定类型的所有实体在我的 ASP.NET MVC 应用程序中都有一个相应的用户,并且这是在数据库级别强制执行的,即作为不可为空的字段。但是,当我在模型类的 Required
属性上设置 IdentityUser
属性时,如下所示:
using Microsoft.AspNetCore.Identity;
using System.ComponentModel.DataAnnotations;
namespace Test.Models
{
public class Foo
{
public int Id { get; set; }
[Required]
public IdentityUser User { get; set; }
}
}
生成的相应迁移将 UserId
表字段设置为可空:
UserId = table.Column<string>(type: "TEXT",nullable: true)
我已经读过 Table Per Hierarchy 会导致这种情况,但我没有使用任何类型的继承。
我错过了什么?有没有办法实现我想要的?
解决方法
尝试修复你的类
public class Foo
{
[Key]
public int Id { get; set; }
[Required]
public string UserId { get; set; }
[ForeignKey(nameof(UserId))]
public IdentityUser User { get; set; }
}
Net 5 会自动创建一个影子属性 UserId,以便您可以保存 Foo 类。由于您使用了 [Required],EF 会自动添加它可以为 null。如果此属性不能为 null(例如,如果它是 int 类型(不是 int?!)),则不需要 [Required] 属性。
,您还可以使用 Fluent API 来配置您的约束。
public class Foo
{
public int Id { get; set; }
public string UserId { get; set; }
public IdentityUser User { get; set; }
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection",throwIfV1Schema: false)
{
}
public DbSet<Foo> Foos { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Foo>()
.HasRequired(c => c.User)
.WithMany(d => d.Foos)
.HasForeignKey(c => c.UserId);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。