如何在插入或更新实体时添加数据

时间:2013-03-06 11:19:46

标签: entity-framework entity-framework-5 wcf-ria-services

我们在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);
实际更新数据库的

,但在从数据库再次获取实体之前,客户端不会更新/通知更改。

有没有人知道如何最好地实现这个目标?

1 个答案:

答案 0 :(得分:2)

是的,请致电

DBContext.SaveChanges()

实际将更改提交到数据库