最近学习Linq to SQL,发现问题如下: class Program
{
static void Main(string[] args)
{
NorthWindDataContext db = new NorthWindDataContext();
Shippers ship = (from s in db.Shippers where s.ShipperID == 1 select s).Single<Shippers>();
ship.CompanyName = "liwei";
db.SubmitChanges();
}
} 对于上述代码,运行后CompanyName 会修改为liwei,而如果修改代码如下: public partial class NorthWindDataContext : System.Data.Linq.DataContext
{
partial void UpdateShippers(Shippers instance)
{
Console.WriteLine("Updating...");
}
}
class Program
{
static void Main(string[] args)
{
NorthWindDataContext db = new NorthWindDataContext();
Shippers ship = (from s in db.Shippers where s.ShipperID == 1 select s).Single<Shippers>();
ship.CompanyName = "liwei";
db.SubmitChanges();
}
} 则程序只会显示Updating...而不会进行实质性的修改。
两段代码的区别只是后者引入了局部方法。但似乎DataContext在执行局部方法时就不再执行数据库操作部分的代码了:即DataContext似乎可以判断局部代码是否被执行了,请问这是怎么做到的?另外,请问高手为什么要这么设计,即为什么要用局部方法的方式来实现,我觉得用重载似乎更直接啊?
{
static void Main(string[] args)
{
NorthWindDataContext db = new NorthWindDataContext();
Shippers ship = (from s in db.Shippers where s.ShipperID == 1 select s).Single<Shippers>();
ship.CompanyName = "liwei";
db.SubmitChanges();
}
} 对于上述代码,运行后CompanyName 会修改为liwei,而如果修改代码如下: public partial class NorthWindDataContext : System.Data.Linq.DataContext
{
partial void UpdateShippers(Shippers instance)
{
Console.WriteLine("Updating...");
}
}
class Program
{
static void Main(string[] args)
{
NorthWindDataContext db = new NorthWindDataContext();
Shippers ship = (from s in db.Shippers where s.ShipperID == 1 select s).Single<Shippers>();
ship.CompanyName = "liwei";
db.SubmitChanges();
}
} 则程序只会显示Updating...而不会进行实质性的修改。
两段代码的区别只是后者引入了局部方法。但似乎DataContext在执行局部方法时就不再执行数据库操作部分的代码了:即DataContext似乎可以判断局部代码是否被执行了,请问这是怎么做到的?另外,请问高手为什么要这么设计,即为什么要用局部方法的方式来实现,我觉得用重载似乎更直接啊?
楼主的重载意思是?
我这里有个代码:namespace ConsoleApp
{
public partial class Student
{
public string name {private set; get; }
partial void getNameInfo();//方法声明
partial void getNameInfo(string name);//方法声明
public void test()
{
this.getNameInfo("cheng");
}
}
}然后在Main方法中实现:namespace ConsoleApp
{
public partial class Student
{
partial void getNameInfo()
{
Console.WriteLine("Part1");
}
}
public partial class Student
{
partial void getNameInfo(string name)
{
Console.WriteLine(name);
}
}
class Program
{
static void Main(string[] args)
{
Student std = new Student();
std.test();
Console.Read();
}
}
}
myProc(....);
else
.....这样地处理。甚至根本不需要else部分。