Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.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# 通过更新父对象删除Linq to SQL中的相关对象_C#_Linq To Sql - Fatal编程技术网

C# 通过更新父对象删除Linq to SQL中的相关对象

C# 通过更新父对象删除Linq to SQL中的相关对象,c#,linq-to-sql,C#,Linq To Sql,当我想添加新的相关对象时,我可以使用以下方法: 从数据库中提取父对象 找到与另一个模型保持一对多关系的属性(我相信这是一个EntitySet) 在那里插入新的子对象 最后保存父类 例如: var post = db.Post.Single(x => x.Id == 1); post.Tag.Add(new Tag(){ name="Brand new!" }; db.SubmitChanges(); 与简单地将子对象直接添加到DB相比,这看起来可能会有一些额外的麻烦,但是当必须使用通

当我想添加新的相关对象时,我可以使用以下方法:

  • 从数据库中提取父对象
  • 找到与另一个模型保持一对多关系的属性(我相信这是一个
    EntitySet
  • 在那里插入新的子对象
  • 最后保存父类
例如:

var post = db.Post.Single(x => x.Id == 1);
post.Tag.Add(new Tag(){ name="Brand new!" };
db.SubmitChanges();
与简单地将子对象直接添加到DB相比,这看起来可能会有一些额外的麻烦,但是当必须使用通用服务(意味着对DBContext的访问在控制器内部被隐藏)来处理DB操作时,它实际上是很方便的(有时也很方便)

现在,是否可以以类似方式删除相关对象?

我记得以前曾尝试过这个想法,但从未成功过(我认为例外情况是提到对象被连接到数据库是失败的原因)

我知道我可以简单地写:

var model = db.Tag.Single(x => x.PostId == 1 && name == "Brand new!");
db.Tag.DeleteOnSubmit(model);
db.SubmitChanges();
就这样吧。在我的项目上下文中,这样的代码将被放置在从通用服务继承的自定义服务中。关键是,我只想知道在更新父对象时是否可以删除相关对象。如果可能的话,这可能会帮助我更快地生成一些原型代码,如果不可能的话,我只是用标准的方式处理它

var model = db.Tag.Single(x => x.PostId == 1 && name == "Brand new!");
db.Tag.DeleteObject(model);
db.SubmitChanges();
这就是你需要的

或者,您可以通过以下方式:

db.Tag.Where(x=>x.PostId==i&&name==“全新!”).ToList().ForEach(Tag.Tag.DeleteObject);
db.SaveChanges()

或者这种方式也应该有效:


db.Tag.Delete(x=>x.PostId==1&&name==“全新!”)

也许我的帖子会帮助某人:)

假设您在Post和Tag之间有一个空外键,并且通过Tag.PostID==Post.ID进行关联

我是这样做的:在代码中,您只需从集合中删除一个子项(如您所愿):

在此之后(如果您的外键可为null),您将在数据库中有一个PostID==null的标记。为了避免这种情况,可以使用一个分部方法扩展DataContext类:

public partial class YourDataContext
{        
    partial void UpdateTag(Tag instance)
    {
        //If PostID is null
        if(!instance.PostID.HasValue)
        {
            //Delete this record from the DB
            this.ExecuteDynamicDelete(instance);
        }
    }
}
代替.dbml文件中的最后一段代码属性(设计器无法访问)

尝试db.Tag.DeleteObject(model);
public partial class YourDataContext
{        
    partial void UpdateTag(Tag instance)
    {
        //If PostID is null
        if(!instance.PostID.HasValue)
        {
            //Delete this record from the DB
            this.ExecuteDynamicDelete(instance);
        }
    }
}