读书人

新手问个关于Linq to SQL的有关问题

发布时间: 2012-05-20 16:03:12 作者: rapoo

新手问个关于Linq to SQL的问题
问题有点长,还劳烦各位大牛们看下。

首先贴下测试表:

C# code
    [Table(Name = "tbl_users")]    public class User    {        #region Attributes        [Column(Name = "uId", IsDbGenerated = true, IsPrimaryKey = true)]        public int Id { get; set; }        [Column(Name = "uName", CanBeNull = false)]        public string Name { get; set; }        #endregion    }


用Log可以查到进行常规的添加或查找操作Linq to SQL都会生成一条语句进行查询,例如:
C# code
            DataContext con = new DataContext(Common.CONNSTR);            con.GetTable<User>().InsertOnSubmit(new User() { Name = "王三" });            con.SubmitChanges();            con.Dispose();对应T-Sql:insert into tbl_users(uName) values('王三')            try            {                return (new DataContext(Common.CONNSTR).GetTable<User>().Single(u => u.Id == 6 && u.Name == "王二"));            }            catch            {                return (null);            }对应T-Sql:select * from tbl_users where uId=6 and uName='王二'

但是对应常规的删、改操作则会分别生成两条语句进行查询:
C# code
            DataContext con = new DataContext(Common.CONNSTR);            con.GetTable<User>().Single(u => u.Id == 6 && u.Name == "王三").Name = "王二";            con.SubmitChanges();            con.Dispose();对应T-Sql:select * from tbl_users where uId=6 and uName='王三'update tbl_users set uName='王二' where uId=6 and uName='王三'            DataContext con = new DataContext(Common.CONNSTR);            con.GetTable<User>().DeleteOnSubmit(con.GetTable<User>().Single(u => u.Id == 6));            con.SubmitChanges();            con.Dispose();对应T-Sql:select * from tbl_users where uId=6delete tbl_users where uId=6 and uName=(上一句查到的值)

由于篇幅关系,上面的SQL语句都写成化简后的形式。

问题就是,除了ExecuteCommand以外,还有没有别的办法让删改操作像ADO一样只用一个查询完成?
C# code
修改:                con.ExecuteCommand("update tbl_users set uName={0} where uId={1} and uName={2}", "王二", 6, "王三");删除:                con.ExecuteCommand("delete tbl_users where uId={0}", 6);


[解决办法]
这个。。。LINQ2SQL
在UPATE和DELETE操作前,必需要先获取数据再进行后续操作

[解决办法]
如果是 nhibernate,删除可以一条语句,修改仍然要先查后改。linq2sql不熟。其实这里没有太大的性能损失,不用太纠结。
[解决办法]
我想它这样设计也是有一定道理的,
ORM最重要的是对象,删除和修改首先应该得到此对象,再执行操作.
所有它先查询此对象,然后执行删除和修改操作.
[解决办法]
如果你认为ADO.NET方法跟简练,为什么不同时使用呢?

其实就是有些人过于死板的原因,硬说“学会了Linq to SQL的话,再使用ADO.NET就显得麻烦了”。这是懒惰或者就是幼稚。对于很基本的东西,我完全支持不同的人使用不同的方法来操作数据库,没有必要要求所有人都只允许使用一种(美其名曰“统一”的)方法。
[解决办法]
探讨
引用:

需要修改linq to sql的底层
可以直接实现更新,删除


博客园:赵有相关文章
不过我是实现,但还是看赵的文章做的。

有点感兴趣,不知是否可以提供下链接。

读书人网 >C#

热点推荐