মুছে ফেলার দ্রুততম উপায় হ'ল সঞ্চিত পদ্ধতি ব্যবহার করা। আমি গতিশীল এসকিউএল এর চেয়ে বেশি একটি ডাটাবেস প্রকল্পে সঞ্চিত পদ্ধতি পছন্দ করি কারণ নামগুলি সঠিকভাবে পরিচালনা করা হবে এবং সংকলক ত্রুটি থাকবে। গতিশীল এসকিউএল চালিত সময়ের ত্রুটির কারণে মুছে ফেলা / নাম বদলে দেওয়া টেবিলগুলি উল্লেখ করতে পারে।
এই উদাহরণে, আমার কাছে দুটি টেবিল রয়েছে তালিকা এবং তালিকা আইটেম। প্রদত্ত তালিকার সমস্ত তালিকা আইটেম মুছতে আমার দ্রুত উপায় দরকার।
CREATE TABLE [act].[Lists]
(
[Id] INT NOT NULL PRIMARY KEY IDENTITY,
[Name] NVARCHAR(50) NOT NULL
)
GO
CREATE UNIQUE INDEX [IU_Name] ON [act].[Lists] ([Name])
GO
CREATE TABLE [act].[ListItems]
(
[Id] INT NOT NULL IDENTITY,
[ListId] INT NOT NULL,
[Item] NVARCHAR(100) NOT NULL,
CONSTRAINT PK_ListItems_Id PRIMARY KEY NONCLUSTERED (Id),
CONSTRAINT [FK_ListItems_Lists] FOREIGN KEY ([ListId]) REFERENCES [act].[Lists]([Id]) ON DELETE CASCADE
)
go
CREATE UNIQUE CLUSTERED INDEX IX_ListItems_Item
ON [act].[ListItems] ([ListId], [Item]);
GO
CREATE PROCEDURE [act].[DeleteAllItemsInList]
@listId int
AS
DELETE FROM act.ListItems where ListId = @listId
RETURN 0
আইটেমগুলি মুছতে এবং একটি এক্সটেনশন ব্যবহার করে সত্তা ফ্রেমওয়ার্ক আপডেট করার আকর্ষণীয় অংশ।
public static class ListExtension
{
public static void DeleteAllListItems(this List list, ActDbContext db)
{
if (list.Id > 0)
{
var listIdParameter = new SqlParameter("ListId", list.Id);
db.Database.ExecuteSqlCommand("[act].[DeleteAllItemsInList] @ListId", listIdParameter);
}
foreach (var listItem in list.ListItems.ToList())
{
db.Entry(listItem).State = EntityState.Detached;
}
}
}
মূল কোডটি এখন এটি ব্যবহার করতে পারে
[TestMethod]
public void DeleteAllItemsInListAfterSavingToDatabase()
{
using (var db = new ActDbContext())
{
var listName = "TestList";
// Clean up
var listInDb = db.Lists.Where(r => r.Name == listName).FirstOrDefault();
if (listInDb != null)
{
db.Lists.Remove(listInDb);
db.SaveChanges();
}
// Test
var list = new List() { Name = listName };
list.ListItems.Add(new ListItem() { Item = "Item 1" });
list.ListItems.Add(new ListItem() { Item = "Item 2" });
db.Lists.Add(list);
db.SaveChanges();
listInDb = db.Lists.Find(list.Id);
Assert.AreEqual(2, list.ListItems.Count);
list.DeleteAllListItems(db);
db.SaveChanges();
listInDb = db.Lists.Find(list.Id);
Assert.AreEqual(0, list.ListItems.Count);
}
}