我在PostgreSQL数据库上使用Entity Framework 6和Npgsql提供程序。我有从这个类创建的代码优先迁移:
Required
我生成了迁移文件并创建了表,但我注意到所有NOT NULL
属性都在数据库中被赋予了默认值,这使得从数据库中强制执行defaultValueSql
限制变得更加困难。因此,在迁移中,我在列上设置了CreateTable(
"dbo.CarriedItems",
c => new {
CarriedItemId = c.Int(nullable: false, identity: true),
Size = c.Int(nullable: false, defaultValueSql: "1"),
Name = c.String(nullable: false, defaultValueSql: null),
Description = c.String(),
GameOrPay = c.Boolean(nullable: false, defaultValueSql: null),
Cost = c.String(nullable: false, defaultValueSql: null),
})
.Index(c => c.Name, unique: true)
.PrimaryKey(t => t.CarriedItemId);
属性。
NOT NULL
我删除并重新创建了数据库并再次运行迁移。它似乎没有任何区别。我可以查看它在PGAdmin中生成的表,并查看默认值仍然在CREATE TABLE dbo."CarriedItems"
(
"CarriedItemId" serial NOT NULL,
"Size" integer NOT NULL DEFAULT 1,
"Name" text NOT NULL DEFAULT ''::text,
"Description" text,
"GameOrPay" boolean NOT NULL DEFAULT false,
"Cost" text NOT NULL DEFAULT ''::text,
CONSTRAINT "PK_dbo.CarriedItems" PRIMARY KEY ("CarriedItemId")
)
WITH (
OIDS=FALSE
);
列上设置:
CREATE TABLE dbo."CarriedItems"
(
"CarriedItemId" serial NOT NULL,
"Size" integer NOT NULL DEFAULT 1,
"Name" text NOT NULL,
"Description" text,
"GameOrPay" boolean NOT NULL,
"Cost" text NOT NULL,
CONSTRAINT "PK_dbo.CarriedItems" PRIMARY KEY ("CarriedItemId")
)
WITH (
OIDS=FALSE
);
我可以用一个设置来阻止默认值吗?我希望表格看起来像这样:
want = put(input(number,best32.),z4.);
答案 0 :(得分:0)
查看迁移源代码,方法AppendColumn,您的情况可能是这个
else if (column.IsNullable != null
&& !column.IsNullable.Value
&& (column.StoreType == null ||
(column.StoreType.IndexOf("rowversion", StringComparison.OrdinalIgnoreCase) == -1)))
{
sql.Append(" DEFAULT ");
AppendValue(column.ClrDefaultValue, sql);
}
所以如果你指定storeType它应该有效。