Sha*_*ean 26 entity-framework ef-code-first
如何设置我的域和LINQ语句,以便从数据库中删除记录?
public class Category {
public int CategoryId { get; set; }
public string Name { get; set; }
public List<Product> Products{ get; set; }
}
public class Product {
public int ProductId { get; set; }
public string Name { get; set; }
public int CategoryId {get; set; }
public Category Category{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是删除类别,并能够将删除级联到所有子产品.
这是唯一的方法吗?
Category category = new Category() { CategoryId = 1 } ;
context.AttachTo("Category", category);
context.DeleteObject(category);
context.Savechanges();
Run Code Online (Sandbox Code Playgroud)
Lad*_*nka 41
您首先提到EF代码,这意味着EF 4.1,但您已经显示了在EF 4中删除对象的示例.在EF 4.1中删除对象而不从数据库加载对象的正确方法是:
var category = new Category() { CategoryId = 1 };
context.Categories.Attach(category);
context.Categories.Remove(category);
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
如果您没有更改defalut约定配置中的任何内容,它也将删除所有相关产品,因为OneToManyCascadeDeleteConventions确保创建所有一对多关系ON CASCADE DELETE.不会有任何额外的往返到数据库-只有单一DELETE的语句Category与Id= 1.
如果要删除完全加载Category(带有加载的Products导航属性),则会出现不同的情况.EF会为每个创建单独的删除语句,Product因此您将有N + 1往返数据库,其中N是类别中的产品数.以下是级联删除在EF中的工作原理.它与实体设计师有关,但描述的原则是相同的.
| 归档时间: |
|
| 查看次数: |
33065 次 |
| 最近记录: |