asp.NET LINQ从数据库中删除
本文关键字:删除 数据库 NET LINQ asp | 更新日期: 2023-09-27 18:21:47
我有一个SQL Server数据库,其中有两个表:
t1-类别
Id
Name
t2-产品
Id
Name
CategoryId
我想从Category
表中删除一行,但由于我有外键,我需要处理具有要删除的CategoryId
的产品。
所以我做了这个:
var ProdCatID = (from prod in DataContext.Products
where prod.CategoryId == Convert.ToInt32(Id)
select prod).First();
ProdCatID.CategoryId = null;
DataContext.SubmitChanges();
var DelCat = (from cat in DataContext.Categories
where cat.Id == Convert.ToInt32(Id)
select cat).ToList();
DataContext.Categories.DeleteAllOnSubmit(DelCat);
DataContext.SubmitChanges();
What I m trying to do is to check if there is any product with that
CategoryId , if there is - I want to set the
Category ID to null and then delete the row from the
Category`表。
当我有一个带有CategoryId
的产品,但我无法删除它时,它就起作用了。
有什么想法吗?
您只将第一个具有该CategoryID的产品设置为null-您需要处理所有具有该ID的产品!
var products = (from prod in DataContext.Products
where prod.CategoryId == Convert.ToInt32(Id)
select prod).ToList();
foreach(Product p in products)
{
p.CategoryId = null;
}
DataContext.SubmitChanges();
.....
之后,现在您应该能够从表
简单!更改数据库中的产品表配置!
ALTER TABLE Product
ADD CONSTRAINT 'Category_FK'
FOREIGN KEY (CategoryId)
REFERENCES Category(Id)
ON DELETE SET NULL;
无论何时删除主键,都会自动置空!
实体框架中存在删除级联。级联删除会自动删除从属记录,或者在删除主体记录时将外键属性设置为null。
这是父母和孩子之间的一对多关系
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>()
.HasOptional(a => a.UserDetail)
.WithOptionalDependent()
.WillCascadeOnDelete(true);
}
有关更多详细信息,请查看:http://www.entityframeworktutorial.net/code-first/cascade-delete-in-code-first.aspx