Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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
C# 如何从Fluent API为外键设置onUpdate?_C#_Sql Server_Entity Framework Core - Fatal编程技术网

C# 如何从Fluent API为外键设置onUpdate?

C# 如何从Fluent API为外键设置onUpdate?,c#,sql-server,entity-framework-core,C#,Sql Server,Entity Framework Core,我试图在EntityFramework7中获得一个外键关系,以便在删除级联上应用,在更新级联上应用sql约束 在OnModelCreating中使用模型生成器时,我能够指定删除时使用级联的关系。我需要帮助的是找出在哪里指定更新操作 以下是我的示例模型代码: class DatabaseContext : DbContext { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)

我试图在EntityFramework7中获得一个外键关系,以便在删除级联上应用
,在更新级联
上应用sql约束

OnModelCreating
中使用模型生成器时,我能够指定删除时使用级联的关系。我需要帮助的是找出在哪里指定更新操作

以下是我的示例模型代码:

class DatabaseContext : DbContext
{
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer("...connection string...");
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Comment>()
            .HasOne(c => c.Post)
            .WithMany(p => p.Comments)
            .HasForeignKey(c => c.PostName)
            .OnDelete(DeleteBehavior.Cascade); 
            //if you delete the post, delete its comments

        modelBuilder.Entity<Comment>().HasKey(c => new { c.Number, c.PostName });
    }
}

class Post
{
    [Required, Key, StringLength(100)]
    public string Name { get; set; }
    public string Contents { get; set; }
    public List<Comment> Comments { get; set; }
}

class Comment
{
    public int Number { get; set; }
    [Required]
    public Post Post { get; set; }
    [Required, StringLength(100)]
    public string PostName { get; set; }
    public string Contents { get; set; }
}
请注意,最后一个参数已注释掉;我后来手动添加了这个。如果我取消对该行的注释,则创建的sql表不会应用更新级联上的

现在我需要手动更改迁移文件以添加更新级联支持。在Fluent API中是否有一种方法可以让迁移引擎在创建迁移文件时为我添加更新:referentialction.Cascade

给出了一些有趣的结果,这也是我如何发现手动编辑迁移文件是可行的

CSharpMigrationOperationGenerator
类中,处理
AddForeignKeyOperation
以写入
onUpdate:
的方法,因此生成器必须能够写入所需的值。我如何触发它


为了尝试给出一个答案,我在
OnModelCreating
中创建外键后添加了以下内容:

modelBuilder.Entity<Comment>()
    .Property(p => p.PostName)
    .ValueGeneratedOnAddOrUpdate();
modelBuilder.Entity()
.Property(p=>p.PostName)
.ValueGeneratedOnAddOrUpdate();

创建的迁移与不使用此代码创建的迁移相同,因此结果sql表中没有任何更改。

这也让我陷入了一段时间。您需要访问属性本身才能执行此操作

modelBuilder.Entity<Comment>()
   .Property(c => c.YourProperty)
   .ValueGeneratedOnAddOrUpdate();
modelBuilder.Entity()
.Property(c=>c.yourperty)
.ValueGeneratedOnAddOrUpdate();

这是令人困惑的,但如果你在VisualStudio中阅读了对它的描述,它将对它的功能有所帮助

这并没有在迁移过程中产生任何差异。我在帖子中添加了详细信息。
modelBuilder.Entity<Comment>()
   .Property(c => c.YourProperty)
   .ValueGeneratedOnAddOrUpdate();