什么是SQL UPDATE的实体框架等价物?

时间:2012-09-17 18:35:22

标签: c# entity-framework

我浏览了整个互联网,仍然无法找到解决方案。

我尝试了附加方法:

    public static void updatePhoto(string name, string albumName, string newName, string newPath)
    {
        //updates photo... no delete and adding...
        var photo = new Image(){Label=newName, Path = newPath};
        using (var db = new EzPrintsEntities())
        {
            db.Images.Attach(photo);
            db.SaveChanges();
        }

    }

但这根本没有做任何事情。

那么问题是如何在下面的代码中通过EF实现对sql数据库的UPDATE?

    public static void updatePhoto(string name, string albumName, string newName, string newPath)
    {
         EzPrintsEntities db = new EzPrintsEntities();

    }

3 个答案:

答案 0 :(得分:5)

如果您要更新现有照片,则需要加载它,然后更改现有值:

public static void updatePhoto(string name, string albumName, string newName, string newPath)
{
    using (var db = new EzPrintsEntities())
    {
        // Load photo
        var photo = db.Images.FirstOrDefault(i => i.Label == name && i.Album == albumName);
        if (photo == null)
        {
           // no matching photo - do something
        }

        // Update data
        photo.Label = newName;
        photo.Path = newPath; 

        db.SaveChanges();
    }

}

答案 1 :(得分:0)

最简单的方法是:

public static void updatePhoto(string name, string albumName, string newName, string newPath)   
{   
    //updates photo... no delete and adding...       

    using (var db = new EzPrintsEntities())   
    {   
        var photo = (from p in db.Images
                 where p.name == name &&
                 p.albumname == albumName 
                 select p).First();
        photo.name = newName;
        photo.path = newPath;
        db.SaveChanges();   
    }   

}   

您只需使用Linq选择现有的photo对象,修改它,然后SaveChanges()

答案 2 :(得分:0)

您要执行的操作还会将updatePhoto实体上主键的值传递给Image方法。然后,您不是创建新的Image实体并将其附加并保存上下文,而是从您的上下文中获取Image实体,然后只更新其中的属性。

这些方面的东西:

using (var db = new EzPrintsEntities())
{
    var image = db.Images.SingleOrDefault(i => i.Id == id); // Assuming Id is the PK on Image, and we sent in the PK in a variable called id.
    if (image != null)
    {
        image.Label = newName;
        image.Path = newPath;

        db.SaveChanges();
    }
    else
    {
        // Invalid PK value sent in, do something here (logging, error display, whatever).
    }
}