Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
因为EF没有';不支持删除集NULL,我可以在EF之外运行SQL命令来执行吗?_Sql_Entity Framework_Foreign Keys - Fatal编程技术网

因为EF没有';不支持删除集NULL,我可以在EF之外运行SQL命令来执行吗?

因为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

我知道,如果希望FK可为空,则在实体中设置了可为空的密钥:

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");" 
}