C#在上下文之外保存实体对象

时间:2012-06-18 20:54:02

标签: c# linq entity-framework

我有来自以下linq查询的记录:

using (var context = new myEntities())
{
     var record = (from d in context.Student select d).SingleOrDefault();
}

我通常会为记录分配一个新值,如下所示:

record.Value = SomeNewValue;

然后我会做一个

context.SaveChanges;

这一切都很好。我的问题是:如果我将其传递给另一个函数或者从函数返回记录,我如何保存相同的记录?我正在寻找这样的东西:

context.SaveChanges(record);

3 个答案:

答案 0 :(得分:1)

触发相关功能的操作应该创建和管理context。如果它是一个ASP.NET MVC应用程序,我建议您在请求开始时设置上下文,并在完成后调用context.SaveChanges。在winforms / WPF应用程序中,您可能希望在应用程序的生命周期内保持context,并在任何可能更改数据的操作(如按下按钮)后调用context.SaveChanges()

答案 1 :(得分:0)

你的意思是你有一个类对象可以使用吗?如果是这样的话:

myEntities.Student.AddObject(student); //Where student is of type Student

或者,如果您还没有,请立即创建一个:

myEntities.Student.AddObject(new Student()
           {
              Name = formData[Name],
              GPA = GetGPA(),
              Major = Convert.ToString(Major)
           });

尽管如此,您仍然需要致电SaveChanges

<强>另外...

如果您跟踪对象并在上述上下文之外使用它们,则可以修改属性的访问器,以便在修改对象的属性时调用SaveChanges()方法并提交更改。只是想一想。

进一步阅读材料: http://msdn.microsoft.com/en-us/library/bb738695.aspx

答案 2 :(得分:0)

也许你喜欢这样的事情:

static class Utilities
{
    public static void SaveChanges( this MyEntity entity, Student record, Student SomeNewValue ) 
    {
         record.Value = SomeNewValue;
         entity.SaveChanges;
    }
}

那么你可以像这里一样调用函数:

context.SaveChanges(record, SomeNewValue);