我浏览了整个互联网,仍然无法找到解决方案。
我尝试了附加方法:
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();
}
答案 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).
}
}