2

私はインターネット全体を見ましたが、これに対する解決策を見つけることができませんでした。

アタッチ方法を試しました:

    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();

    }
4

3 に答える 3

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();
    }

}
于 2012-09-17T18:39:09.303 に答える
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();   
    }   

}   

photoLinq を使用して既存のオブジェクトを選択し、変更するだけです。SaveChanges()

于 2012-09-17T18:40:49.513 に答える
0

やりたいことは、エンティティupdatePhotoの主キーの値をメソッドに渡すことです。次に、新しいエンティティを作成してアタッチしてコンテキストを保存するImage代わりに、コンテキストからエンティティを取得し、そのプロパティを更新するだけです。ImageImage

これらの行に沿ったもの:

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).
    }
}
于 2012-09-17T18:41:35.450 に答える