私は次のPOCOエンティティを持っています:
public class User
{
[...other properties...]
public byte Status { get; set; }
public DateTime? DataStatus { get; set; }
}
私が欲しいもの:set
プロパティのメソッド内で、変更されたときに現在の日付Status
で更新することは可能ですか?DataStatus
Status
私は次のPOCOエンティティを持っています:
public class User
{
[...other properties...]
public byte Status { get; set; }
public DateTime? DataStatus { get; set; }
}
私が欲しいもの:set
プロパティのメソッド内で、変更されたときに現在の日付Status
で更新することは可能ですか?DataStatus
Status
最初にコードを使用している場合は、プロパティをプライベート フィールドに戻し、独自のゲッターとセッターを実装するだけです。最初に 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; }
}
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;
}
}
};
}
確かに、それはかなり簡単です。自動プロパティの代わりにバッキング フィールド プロパティを使用する必要があります。
public class User
{
private byte _status;
public byte Status
{
get { return _status; }
set
{
_status = value;
DataStatus = DateTime.Now;
}
}
public DateTime? DataStatus { get; set; }
}
自動プロパティではなく、裏付けられたプロパティで変数を使用する場合:
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; }
}
}