1

Silverlight アプリで RIA サービスを使用しており、エンティティの 1 つについて、誰がいつ作成および更新したかを追跡したいと考えています。このために、次のプロパティを追加しました。

public class Person
{
    public string CreatedBy { get; set; }
    public DateTime CreatedOn { get; set; }
    public string LastModifiedBy { get; set; }
    public DateTime LastModifiedOn { get; set; }
}

クライアントでこれを行う必要がないように、ドメインサービスでこれらの値を更新したいと思います(また、エンティティもサーバー側で追加/更新されるためです(。ドメインサービスメソッドを次のように変更して実行しようとしましたこれ:

public void InsertPerson(Person person)
{
    person.CreatedBy = GetCurrentUser();
    person.CreatedOn = DateTime.Now();

    DbEntityEntry<Person> entityEntry = this.DbContext.Entry(person);
    if ((entityEntry.State != EntityState.Detached))
    {
        entityEntry.State = EntityState.Added;
    }
    else
    {
        this.DbContext.Persons.Add(person);
    }
}

public void UpdatePerson(Person person)
{
    person.LastModifiedBy = GetCurrentUser();
    person.LastModifiedOn = DateTime.Now();

    DbContext.Persons.AttachAsModified(person, ChangeSet.GetOriginal(person), DbContext);
}

しかし、それはこのデータをまったく追加していないようです。次に、エンティティを挿入/更新した後、SQLクエリでそれを実行しようとしました

DbContext.Database.ExecuteSqlCommand("UPDATE Persons SET LastModifiedById = {0}, LastModifiedOn = {1} where Id = {2}", GetCurrentUser(), DateTime.Now, person.Id);

これは実際にデータベースを更新しますが、エンティティがデータベースから再度フェッチされるまで、クライアントは更新されず、変更が通知されません。

これを最もよく達成する方法を知っている人はいますか?

4

1 に答える 1

2

はい、電話してください

DBContext.SaveChanges()

実際に変更をデータベースにコミットする

于 2013-03-06T11:29:30.013 に答える