参考Entity Framework 6中的System.Data.Entity.Migrations.Builders ColumnBuilder类,我们以Int方法为例.
如果我们要创建EF迁移,我们将添加如下列:
AddColumn("Table", "Column", c => c.Int());
在AddColumn的最后一个参数中,我们传入了c => c.Int()其中c.Int()调用ColumnBuilder类的Int()方法并返回ColumnModel.
如果我们看一下Int()方法的定义,我们可以看到这个方法的第一个参数是bool?这将定义DB中的列是否创建为可为空.
文档说明参数nullable是“指示列是否允许空值的值”.请参阅https://msdn.microsoft.com/en-us/library/dn589880(v=vs.113).aspx.所以我认为如果它是真的那么该列将被置为可空,如果它是假的则不可为空.
问题是如果它为空会发生什么?
为什么这个bool属性需要可以为空?
最佳答案 这取决于MigrationSqlGenerator实现.
例如,System.Data.Entity.SqlServer.SqlServerMigrationSqlGenerator将NOT NULL添加到ALTER TABLE … ADD COLUMN …语句,如果nullable == false,但否则不添加任何内容.对于ALTER COLUMN,nullable == false在NULL之前添加NOT(无论在生成的语句中,都是如此).
所以nullable == null会产生提供者实现的默认值.