1

我们在 Silverlight 应用程序中使用 RIA 服务,对于我们的一个实体,我们希望跟踪谁创建和更新它们以及何时创建和更新它们。为此,我们添加了以下属性:

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 回答