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的产品,但我无法删除它时,它就起作用了。

有什么想法吗?

asp.NET LINQ从数据库中删除

您只将第一个具有该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