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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

實(shí)體框架/ SQL2008-如何自動(dòng)更新實(shí)體的LastModified字段?

實(shí)體框架/ SQL2008-如何自動(dòng)更新實(shí)體的LastModified字段?

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

3 回答

?
holdtom

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

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


首先,為了使解決方案更可重用,我創(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();

    }

}


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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