0

Entity Framework プロジェクトにタイムスタンプを適用したいと考えています。以下にリストされているクラスがあります。このクラスが現在の DateTime を取得することを望んでいました。しかし、代わりに、日時を入力するフィールドが提供されます。これで現在の日時を取得したい。

 public class Answer
    {
        public int ID { get; set; }
        public string Answers {get; set;}
        public System.DateTime DateCreated { get; set; }
        public string Division { get; set; }
        public string Phone { get; set; }
        public string Description { get; set; }



    }

以下は、間違っていることがわかっているコード行です。

public System.DateTime DateCreated { get; set; }

これについてどうすればよいか少しわかりません。私はエンティティが初めてで、MVC が初めてです。どんな助けでも大歓迎です。

4

3 に答える 3

3

たとえば、コンストラクターで初期化できます

public class Answer
{
    public Answer()
    {
        DateCreated = DateTime.UtcNow;
    }

    ...
}

しかし、あなたのAnswerクラスは実際にはエンティティではなく、ビュー モデルであるという印象を受けます。実際のエンティティの場合、このような固定/生成された値で私が行う傾向があるのは、データベースにフィールドにデフォルト値を入力させ、GetUtcDate()次に EF デザイナーでStoreGeneratedPatternプロパティを設定するComputedことです。エンティティをプルダウンするCreatedDateと、あらかじめ設定されています。これにより、データをバックアップするときにデータベースのフィールドを上書きすることができないため、データの整合性が両方の方法で得られます。

Answer次に、エンティティをビューモデルにマッピングするだけの場合であるAnswerため、何も初期化する必要はありません。

于 2012-10-12T14:42:44.277 に答える
1

コンストラクターで DateCreated を設定するだけです-

public Answer()
{
  DateCreated = DateTime.Now;
}

次に、MVC ビューで使用している場合は、変更されないようにフィールドを非表示に設定します。

于 2012-10-12T14:40:12.753 に答える
1

コンテキストで SaveChanges() メソッドをオーバーライドすることで、タイムスタンプと潜在的な変更日を処理できます。

以下の簡単な例。

public abstract class BaseEntity
{
    public int ID { get; set; }
    public DateTime ModifiedDate { get; set; }
    public DateTime CreatedDate { get; set; }
}
public class Answer : BaseEntity
{
    public String Answers { get; set; }
    public String Division { get; set; }
    public String Phone { get; set; }
    public String Description { get; set; }
}

public class DB_Context : DbContext
{
    .....

    public override int SaveChanges()
    {
        var changeSet = ChangeTracker.Entries<BaseEntity>();

        if (changeSet != null)
        {
            foreach (var added in changeSet.Where(x => x.State == System.Data.EntityState.Added))
            {
                added.Entity.CreatedDate = DateTime.UtcNow;
                added.Entity.ModifiedDate = DateTime.UtcNow;
            }
            foreach (var modified in changeSet.Where(x => x.State == System.Data.EntityState.Modified))
            {
                modified.Entity.ModifiedDate = DateTime.UtcNow;
            }
        }

        return base.SaveChanges();
    }
}
于 2012-10-12T23:45:04.800 に答える