CURD 操作に「wcf データ サービス ツールキット」を使用しています。取得/追加/削除は正常に機能しますが、更新は失敗します。
Update の場合、'GetOne()' メソッドが呼び出されるのがわかりますが、Save() は呼び出されません。
サービスコード:
public class UserService : ODataService<UserContext>
{
public static void InitializeService(DataServiceConfiguration config)
{
config.SetEntitySetAccessRule("*", EntitySetRights.All);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
}
}
リポジトリ コード:
public User GetOne(string id)
{
return _session.Query<User>().Where(a => a.Id == int.Parse(id)).SingleOrDefault();
}
public void Save(User u)
{
_session.Store(u);
_session.SaveChanges();
}
データ コンテキスト コード:
public class UserContext : ODataContext
{
public IQueryable<User> Users
{
get { return base.CreateQuery<User>(); }
}
public override object RepositoryFor(string fullTypeName)
{
return new UserRepository();
}
}
モデルコード:
[DataServiceKey("Id")]
public class User
{
public int Id { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public string UserEmailAddress { get; set; }
}
これが私のテストケースです:
[TestMethod]
public void TestUpdateUser()
{
var context = new UserService.UserContext(new Uri("http://localhost:59050/UserService.svc"));
var user = context.Users.Where(a => a.Id == 385).SingleOrDefault();
user.UserEmailAddress = "updated@email.com";
context.UpdateObject(user);
context.SaveChanges();
var context2 = new UserService.UserContext(new Uri("http://localhost:59050/UserService.svc"));
var updated = context.Users.Where(a => a.Id == 385).SingleOrDefault();
Assert.AreEqual("updated@email.com", updated.UserEmailAddress)
}