2011-05-20 49 views
4

我有以下使用LINQ麻烦SQL实体:LINQ to SQL的麻烦

// Context is DataContext that was auto genereted when i create my .dbml file 

var cl = Context.Classes.ToArray(); 
var rm = Context.Rooms.ToArray(); 

List<DaySchedule> s = new List<DaySchedule>(); 
s.Add(new DaySchedule() 
    { 
     Class = cl[0], 
     DayOfWeek = 0, 
     Pair = 1, 
     Room = rm[0] 
    }); 
Context.SubmitChanges(); 

如此,经过 “的SubmitChanges” 新DaySchedules将被保存到数据库。但我没有调用InsertOnSubmit函数,我不想保存这个DaySchedule。

BTW, 如果我将使用下面的代码:

s.Add(new Acceron.University.DBAccess.DaySchedule() 
    { 
     Class_id = cl[0].Class_ID, 
     DayOfWeek = 0, 
     Pair = 1, 
     Room_id = rm[0].Room_ID 
    }); 

它不会被自动保存到数据库。

你能解释一下它是错误还是功能,我该如何解决它?

+0

第一个代码片段甚至不能工作,因为你使用'c'和'r',我怀疑*应该是'cl'和'rm'。 – 2011-05-20 08:42:33

+0

当然,sry在帖子中更改了 – 2011-05-20 08:45:05

回答

4

它是由设计。 Class和Room是上下文感知实体,因为它们是针对上下文进行查询的。只要上下文感知实体添加子项,它就会自动将这些更改排队到上下文并将其标记为已插入。所以你不能在没有自动排队功能的情况下添加新的实体。我强烈建议您稍后不要致电保存更改。

+0

+1如果您不想保存更改,请勿调用SaveChanges。 – 2011-05-23 01:45:46