第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

實體框架/ SQL2008-如何自動更新實體的LastModified字段?

實體框架/ SQL2008-如何自動更新實體的LastModified字段?

慕桂英3389331 2019-12-26 14:17:41
如果我有以下實體:public class PocoWithDates{   public string PocoName { get; set; }   public DateTime CreatedOn { get; set; }   public DateTime LastModified { get; set; }}對應(yīng)于具有相同名稱/屬性的SQL Server 2008表...我如何自動:將記錄的CreatedOn / LastModified字段設(shè)置為現(xiàn)在(執(zhí)行INSERT時)將記錄的LastModified字段設(shè)置為現(xiàn)在(執(zhí)行UPDATE時)當(dāng)我自動說時,我的意思是我希望能夠做到這一點:poco.Name = "Changing the name";repository.Save(); 不是這個:poco.Name = "Changing the name";poco.LastModified = DateTime.Now;repository.Save();在幕后,“某物”應(yīng)自動更新日期時間字段。那是什么“東西”?我正在使用Entity Framework 4.0-EF是否可以為我自動執(zhí)行此操作?(也許是EDMX中的特殊設(shè)置?)從SQL Server方面,我可以使用DefaultValue,但這僅適用于INSERT(而不是UPDATE)。同樣,我可以在POCO上使用構(gòu)造函數(shù)設(shè)置默認(rèn)值,但是同樣,這僅在實例化對象時有效。當(dāng)然,我可以使用觸發(fā)器,但這并不理想。因為我使用的是Entity Framework,所以我可以在這里掛入SavingChanges事件并更新日期字段,但是問題是我需要“意識到” POCO(目前,我的存儲庫已使用泛型實現(xiàn))。我將需要進(jìn)行某種OO欺騙(例如使我的POCO實現(xiàn)一個接口,并在該接口上調(diào)用一個方法)。我對此并不反對,但是如果我必須這樣做,我寧愿手動設(shè)置字段。我基本上是在尋找SQL Server 2008或Entity Framework 4.0解決方案。(或智能.NET方式)有任何想法嗎?
查看完整描述

3 回答

?
holdtom

TA貢獻(xiàn)1805條經(jīng)驗 獲得超10個贊

我知道我參加聚會有點晚了,但是我只是為我正在從事的項目解決了這個問題,并認(rèn)為我會分享我的解決方案。


首先,為了使解決方案更可重用,我創(chuàng)建了帶有timestamp屬性的基類:


public class EntityBase

{

    public DateTime? CreatedDate { get; set; }

    public DateTime? LastModifiedDate { get; set; }

}

然后我覆蓋了DbContext上的SaveChanges方法:


public class MyContext : DbContext

{

    public override int SaveChanges()

    {

        ObjectContext context = ((IObjectContextAdapter)this).ObjectContext;


        //Find all Entities that are Added/Modified that inherit from my EntityBase

        IEnumerable<ObjectStateEntry> objectStateEntries =

            from e in context.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified)

            where

                e.IsRelationship == false &&

                e.Entity != null &&

                typeof(EntityBase).IsAssignableFrom(e.Entity.GetType())

            select e;


        var currentTime = DateTime.Now;


        foreach (var entry in objectStateEntries)

        {

            var entityBase = entry.Entity as EntityBase;


            if (entry.State == EntityState.Added)

            {

                entityBase.CreatedDate = currentTime;

            }


            entityBase.LastModifiedDate = currentTime;

        }


        return base.SaveChanges();

    }

}


查看完整回答
反對 回復(fù) 2019-12-26
  • 3 回答
  • 0 關(guān)注
  • 699 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號