更新POCO实体中的相关属性(如触发器),是否可能?

时间:2012-10-16 18:54:15

标签: c# entity-framework linq-to-entities poco

我有以下POCO实体:

public class User 
{
    [...other properties...]

    public byte Status { get; set; }
    public DateTime? DataStatus { get; set; }  
}

我想要的:在属性set的{​​{1}}方法内,使用当Status更改时的当前日期更新DataStatus,是否可能?

4 个答案:

答案 0 :(得分:0)

如果您首先使用代码,则可以将该属性备份到私有字段并实现您自己的getter和setter。如果您首先使用DB / Model,则可以覆盖生成的类中的方法,因为它们是部分的。我猜你的例子,你可以做到以下几点。

public class User
{
    private byte _status;
    public byte Status
    {
        get { return _status; }
        set
        {
            _status = value;
            this.DataStatus = DateTime.Now;
        }
    }
    public DateTime? DataStatus { get; set; }
}

答案 1 :(得分:0)

public void SetupDbContext(DbContext context)
{
    (DbContext as System.Data.Entity.Infrastructure.IObjectContextAdapter).ObjectContext.SavingChanges += delegate(object sender, EventArgs e)
    {
        var modified = context.ChangeTracker.Entries<User>().Where(entry => entry.State == EntityState.Modified);
        foreach (var entry in modified)
        {
            if (entry.Property("Status").IsModified)
            {
                entry.Entity.DataStatus = DateTime.Now;
            }
        }
    };
}

答案 2 :(得分:-1)

当然,这很简单。您必须使用支持字段属性而不是自动属性:

public class User
{

    private byte _status;
    public byte Status
    {
        get { return _status; }
        set
        {
            _status = value;
            DataStatus = DateTime.Now;
        }
    }
    public DateTime? DataStatus { get; set; }
}

答案 3 :(得分:-1)

如果您使用带有支持属性的变量,而不是自动属性:

public class User {
    private byte m_Status;
    private DateTime? m_DataStatus;

    public byte Status {
        get { return m_Status; }
        set { m_DataStatus = DateTime.Now; m_Status = value; }
    }
    public DateTime? DataStatus {
        get { return m_DataStatus; }
        set { m_DataStatus = value; }
    }
}