我正在使用EF 4,使用sprocs映射我的实体的所有CUD操作.
我有两张桌子,ADDRESS和PERSON.PERSON可以有多个与其关联的ADDRESS.
这是我正在运行的代码:
Person person = (from p in context.People
where p.PersonUID == 1
select p).FirstOrDefault();
Address address = (from a in context.Addresses
where a.AddressUID == 51
select a).FirstOrDefault();
address.AddressLn2 = "Test";
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
正在更新的地址与我正在检索的人员相关联 - 尽管他们没有在代码中以任何方式明确链接.当context.SaveChanges()执行时,我的地址实体的Update sproc不仅会被触发(就像你期望的那样),但是Person实体的Update sproc也是如此 - 即使你可以看到没有对人实体.
当我在context.SaveChanges()调用之前检查两个对象的EntityState时,我看到我的Address实体的EntityState为"Modified",而我的Person enity的EntityState为"Unchanged".
为什么要为Person实体调用Update sproc?是否有某种设置我可以设置以防止这种情况发生?
我创建了第二个项目,以确保问题没有发生,因为我当前的项目环境中存在某些问题.
首先,我创建了一个包含Order和OrderDetail表的新数据库.它们之间有一个外键,因此Order可以有多个与之关联的OrderDetail.我还在Order和OrderDetail表上创建了"更新后"DB触发器,在更新记录时更新DateTime字段.
其次,我创建了一个简单的WPF应用程序,并创建了一个从我的数据库生成的ADO.NET实体模型.
第三,我将代码添加到我的类构造函数中,如下所示:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
MyEntities context = new MyEntities();
Order order = (from o in context.Orders
select o).FirstOrDefault();
OrderDetail orderDetail = (from d in …Run Code Online (Sandbox Code Playgroud)