因为EF没有';不支持删除集NULL,我可以在EF之外运行SQL命令来执行吗?
我知道,如果希望FK可为空,则在实体中设置了可为空的密钥:因为EF没有';不支持删除集NULL,我可以在EF之外运行SQL命令来执行吗?,sql,entity-framework,foreign-keys,Sql,Entity Framework,Foreign Keys,我知道,如果希望FK可为空,则在实体中设置了可为空的密钥: class ChildEntity { // Other properties not shown for brevity public int? ParentId { get; set; } public virtual ParentEntity Parent; { get; set; } } 这将导致可为空的FK。有人建议我们也应该在Fluent中设置可选关系: modelBuilder.Entity<Ch
class ChildEntity
{
// Other properties not shown for brevity
public int? ParentId { get; set; }
public virtual ParentEntity Parent; { get; set; }
}
这将导致可为空的FK。有人建议我们也应该在Fluent中设置可选关系:
modelBuilder.Entity<ChildEntity>()
.HasOptional(c => c.Parent)
.WithMany()
.HasForeignKey(c => c.ParentId);
modelBuilder.Entity()
.has可选(c=>c.Parent)
.有很多
.HasForeignKey(c=>c.ParentId);
但这仍然不会将delete设置为null。FK ParentId仍将delete设置为No Action
在本文后面,有人建议我们应该在配置类的Seed方法中运行SQL命令?我不确定这是否是一个问题,但我经常运行更新数据库,我会来回更改此设置
那么,在sqlmanagementstudio(或其他应用程序)中“躲在EF后面”并将删除规则更改为设置NULL是否安全呢?由于我们在纯SQL语言的seed方法中使用SqlCommand,我想说是的,我们可以继续手动更改删除规则,但我不确定。我无法承担在这一点上的实验,所以我希望能得到一个答案 该示例将sql放入
Seed
方法中,这意味着每次调用updatedatabase
时它都会运行。通过在迁移中使用Sql
方法对数据库进行修改,可以避免这种情况。这样它只运行一次
public void Up()
{
Sql(@"ALTER TABLE Products DROP CONSTRAINT Product_Category");
Sql(@"ALTER TABLE Products ADD CONSTRAINT Product_Category
FOREIGN KEY (CategoryId) REFERENCES Categories (CategoryId)
ON UPDATE CASCADE ON DELETE SET NULL");"
}