我一直在用LINQ编写相同的代码来插入,更新,删除。我想为Insert,Update,Delete操作提供某种通用函数。我读了一篇帖子here,如下所示:
public static void Insert<T>(T entity) where T : class
{
using (OrcasDB database = new OrcasDB())
{
database.GetTable<T>().Add(entity);
database.SubmitChanges();
}
}
public static void Delete<T>(Expression<Func<T, bool>> predicate)
where T : class
{
using (OrcasDB database = new OrcasDB())
{
T instance = (T) database.GetTable<T>().Where<T>(predicate).Single();
database.GetTable<T>().Remove(instance);
database.SubmitChanges();
}
}
How to Use
// insert
Employee will = new Employee
{
Username = "will.asrari",
EmailAddress = "me@willasrari.com",
CanCode = true
};
LinqHelper.Insert<Employee>(will);
// delete
LinqHelper.Delete(emp => emp.EmployeeId.Equals(3));
是的,我想写一些类似VB.NET的东西。以上代码是否符合要求?任何人都可以向我展示用VB.NET编写的Insert,Delete,Update的LINQ to SQL泛型类吗?
谢谢。
答案 0 :(得分:1)
仅供参考,我设法编写了一个简单的类来为LINQ to SQL执行通用的CUD操作。
'GenericCUD.vb类
导入System.Linq.Expressions Imports System.Data.Linq
Public Class GenericCUD
Public Shared Sub Insert(Of T As Class)(ByVal theEntity As T)
Using db As New DemoDataContext()
db.GetTable(Of T)().InsertOnSubmit(theEntity)
db.SubmitChanges()
End Using
End Sub
Public Shared Sub Update(Of T As Class)(ByVal originalEntity As T, ByVal newEntity As T)
Using db As New DemoDataContext()
db.GetTable(Of T)().Attach(newEntity, originalEntity)
db.Refresh(RefreshMode.KeepCurrentValues, newEntity)
db.SubmitChanges()
End Using
End Sub
Public Shared Sub Delete(Of T As Class)(ByVal theEntity As T)
Using db As New DemoDataContext()
db.GetTable(Of T)().Attach(theEntity)
db.GetTable(Of T).DeleteOnSubmit(theEntity)
db.Refresh(RefreshMode.KeepCurrentValues, theEntity)
db.SubmitChanges()
End Using
End Sub
结束班
如何使用该课程:
'Using Insert
Dim ta As New TestAuthor
ta.FirstName = TextBox1.Text
ta.LastName = TextBox2.Text
GenericCUD.Insert(ta)
'Using Update
Dim original As New TestAuthor
original.Id = 3
Dim newEntity As New TestAuthor
newEntity.Id = original.Id
newEntity.FirstName = TextBox1.Text
newEntity.LastName = TextBox2.Text
GenericCUD.Update(original, newEntity)
'Using Delete
Dim ta As New TestAuthor
ta.Id = 7
GenericCUD.Delete(ta)
我在许多博客上阅读了很多帖子。以下是一些真正帮助我完成GenericCUD的工作:
那么,您如何看待上面的GernericCUD类?请给我一些评论,因为我想改进它。谢谢。
答案 1 :(得分:0)
我们在3层应用程序框架中采用了类似的方法。我们目前有大约80个实体,并使用泛型来创建一组非常轻量级的通用CRUD方法,这些方法可以满足那80个实体和任意数量的实体。
我可能提出的唯一建议是重新考虑为每个插入,更新和删除操作创建新数据库上下文的方法。问题是如果您需要在单个事务中包装多个插入,更新和/或删除,您将需要使用TransactionScope对象,因为每个插入/更新/删除都使用它自己的上下文对象。使用TransactionScope是可以的,但由于你有多个连接,事务将升级为MTC事务,这是一个麻烦。
无法帮助您使用VB代码。 IMO,学习并坚持使用C#。
兰迪