C# 使用ADO.NET实体框架4.0更新数据库

C# 使用ADO.NET实体框架4.0更新数据库,c#,entity-framework-4,C#,Entity Framework 4,我使用ADO.NETEF4.0。首先,我从DB中获取对象并分离这个对象,它由客户端的web服务发送 网络服务: private static Project GetObjects(int id) { var connSetting = ConfigurationManager.ConnectionStrings["ProjectEntities"]; var conn = new EntityConnection(connSetting.Conne

我使用ADO.NETEF4.0。首先,我从DB中获取对象并分离这个对象,它由客户端的web服务发送

网络服务:

    private static Project GetObjects(int id)
    {
        var connSetting = ConfigurationManager.ConnectionStrings["ProjectEntities"];
        var conn = new EntityConnection(connSetting.ConnectionString);
        conn.Open();

        using(var contex= new ProjectEntities(conn))
        {
            var project = (from p in contex.Projects
                           where p.ProjectId == id
                           select p).FirstOrDefault();

            contex.Detach(project);

            return project;
        }
    }
在客户端,这个对象是否被编辑并发送回web服务,在web服务端,我需要使用这个对象数据库进行更新

现在我用这个:

    private static void UpdateObject(Project obj)
    {
        var connSetting = ConfigurationManager.ConnectionStrings["ProjectEntities"];
        var conn = new EntityConnection(connSetting.ConnectionString);
        conn.Open();

        using (var contex = new ProjectEntities(conn))
        {
            var entity = (Project)contex.GetObjectByKey(obj.EntityKey);
            contex.ApplyCurrentValues(entity.EntityKey.EntitySetName, obj);
            contex.SaveChanges();
        }

    }
这个更新方法可以吗?因为首先我必须从对象上下文中获取对象,然后才能更新


你的建议。感谢您的帮助和建议

我们按以下方式进行: context.TableName.Attach(对象); context.ObjectStateManager.ChangeObjectState(对象,System.Data.EntityState.Modified); SaveChanges()


EntityState.Modified可以更改为EntityState.Added以添加新项目,或者delete以删除现有项目。

不确定手动打开连接的原因,如果您只是传递
上下文
连接字符串并允许它根据需要打开和关闭数据库连接,这似乎是不必要的工作。(这不完全是你想要的,但如果有其他原因,也许我会学到一些东西)。