Entity Framework Core:列、参数或变量 #4:找不到数据类型 bool

Posted

技术标签:

【中文标题】Entity Framework Core:列、参数或变量 #4:找不到数据类型 bool【英文标题】:Entity Framework Core: Column, parameter, or variable #4: Cannot find data type bool 【发布时间】:2020-12-09 17:38:50 【问题描述】:

我对这个问题有点困惑,尽管它是不言自明的。我确实尝试将数据类型从 bool 更改为 bit,但是,bit 数据类型呈现白色并且有红色波浪。您会在下面找到我的代码,其中数据类型已更改为位。注意,这是在我运行 add-migration 命令并查看迁移代码之后。

migrationBuilder.CreateTable(
            name: "AspNetUsers",
            columns: table => new
            
                Id = table.Column<string>(nullable: false),
                UserName = table.Column<string>(maxLength: 256, nullable: true),
                NormalizedUserName = table.Column<string>(maxLength: 256, nullable: true),
                Email = table.Column<string>(maxLength: 256, nullable: true),
                NormalizedEmail = table.Column<string>(maxLength: 256, nullable: true),
                EmailConfirmed = table.Column<bit>(nullable: false),
                PasswordHash = table.Column<string>(nullable: true),
                SecurityStamp = table.Column<string>(nullable: true),
                ConcurrencyStamp = table.Column<string>(nullable: true),
                PhoneNumber = table.Column<string>(nullable: true),
                PhoneNumberConfirmed = table.Column<bit>(nullable: false),
                TwoFactorEnabled = table.Column<bit>(nullable: false),
                LockoutEnd = table.Column<DateTimeOffset>(nullable: true),
                LockoutEnabled = table.Column<bit>(nullable: false),
                AccessFailedCount = table.Column<int>(nullable: false),
                FirstName = table.Column<string>(nullable: true),
                LastName = table.Column<string>(nullable: true)
            ,

【问题讨论】:

【参考方案1】:

使用 Entity Framework Core 时请查看mapping between C# data type to SQL Server column data type。

C# bool 类型将映射到 SQL Server bit 类型。因此,在 C# 中,我们必须使用 bool 类型,而不是 bit 类型,但您可以将 type 属性设置为 bit。像这样的代码:

        migrationBuilder.CreateTable(
            name: "TestTables",
            columns: table => new
            
                Id = table.Column<int>(type: "int", nullable: false)
                    .Annotation("SqlServer:Identity", "1, 1"),
                Name = table.Column<string>(type: "nvarchar(max)", nullable: true),
                Email = table.Column<string>(type: "nvarchar(max)", nullable: true),
                EmailConfirmed = table.Column<bool>(type: "bit", nullable: false),
                LockoutEnd = table.Column<DateTime>(type: "datetime2", nullable: false),
                LockoutEnabled = table.Column<bool>(type: "bit", nullable: false)
            ,
            constraints: table =>
            
                table.PrimaryKey("PK_TestTables", x => x.Id);
            );

SQL server 数据库结果如下:

【讨论】:

非常感谢您的帮助和对我收到的错误的详细解释。我会确保将此标记为已接受的答案。我之前遇到过这个错误,但是我不记得问题是什么了。再次感谢您的澄清。

以上是关于Entity Framework Core:列、参数或变量 #4:找不到数据类型 bool的主要内容,如果未能解决你的问题,请参考以下文章

一列用于 Entity Framework Core 中两个不同表的外键

在 Entity Framework Core 中为 PostgreSQL 表的计算列设置公式

Entity Framework Core:将可空列迁移到必需时的默认值

Entity Framework Core:列、参数或变量 #4:找不到数据类型 bool

在 Entity Framework Core 中复制整行

Entity Framework Core 是如何根据实体类生成模型的?