我正在尝试自定义asp.net身份中的IdentityUser类。
public class ApplicationUser : IdentityUser
{
public ApplicationUser()
{
IsBlocked = false;
}
public bool IsBlocked { get; set; }
}
问题是:使用代码首次迁移时,附加字段被创建为可为空。如果删除数据库并重新创建,则相同。
CREATE TABLE [dbo].[AspNetUsers] (
[Id] NVARCHAR (128) NOT NULL,
[UserName] NVARCHAR (MAX) NULL,
[PasswordHash] NVARCHAR (MAX) NULL,
[SecurityStamp] NVARCHAR (MAX) NULL,
[IsConfirmed] BIT NOT NULL,
[IsBlocked] BIT NULL,
[Discriminator] NVARCHAR (128) NOT NULL,
CONSTRAINT [PK_dbo.AspNetUsers] PRIMARY KEY CLUSTERED ([Id] ASC)
);
我怎样才能解决这个问题?
我在同一DbContext上的其他类中有布尔字段,并且它们全都创建为非null(如应有的那样)。
下面的原始答案假设您有一个抽象基类,因此使用的是TPC,或者如果您[Table]
在具体类上指定了属性而不是TPH则使用了TPT 。
但是,如果您使用的是非抽象基类,并且未在[Table]
上指定a ApplicationUser
,因此未将ApplicationUser
andIdentityUser
映射到单个表,则您正在使用TPH方案。在这种情况下,子类中的任何字段在您的单个表中都可以为空。更改此设置的唯一方法是切换到TPC或TPT。
原始答案
将[Required]
属性放在您的媒体资源上:
[Required]
public bool IsBlocked { get; set; }
然后,您的迁移应使其成为一NON NULL
列。
但是,如果您的表中已经有数据,这将导致问题,因为它不知道要创建哪个默认值。在这种情况下,我将迁移编辑为首先使其成为一NULL
列,然后运行Sql
命令以设置所需的值,然后AlterColumn
使其成为一NON NULL
列
AddColumn("dbo.MyTable", "MyColumn", c => c.Boolean());
Sql("UPDATE MyTable SET MyColumn = 1");
AlterColumn("dbo.MyTable", "MyColumn", c => c.Boolean(nullable: false));
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句