EF中多表公共字段,以及設置EntityBase使所有實體類繼承自定義類


使用EF框架訪問數據庫時,如果某些表具有公共字段,例如在審核流程中,對於各類申請單資料的創建人、創建時間、修改人、修改時間,這些可能多表都需要的字段,如果在每個實體中進行賦值操作顯然是類似和重復的,下面是一個統一在數據提交時進行賦值的例子(經簡化,如果只是為記錄時間並不用這么做),記錄如下:

1、 創建一個公用接口IAudited,包含公用字段,申請單實體類繼承這個接口。

2、 定義一個抽象類DbEntity(用dbml文件的EntityBase屬性,使數據庫實體類都繼承自此類),定義OnSaving,檢查可以轉轉化為IAudited的實體,統一賦值公共字段。

3、  Db訪問數據庫類,提交數據前將數據轉會為DbEntity,並調用OnSaving使公共字段數據賦值后后再存入數據庫。

具體代碼以一個MVC3項目為例:

1、 新建一個MVC3項目,目錄結構如下:

2、 添加Db.dbml,選擇菜單View-Server Explorer,添加數據庫連接,選擇數據庫中的表拖放到打開的Db.dbml

3、 IAudited類

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MvcApplication1.Data
{
    public interface IAudited
    {
        DateTime CreateOn { get; set; }
        DateTime LastUpdateOn { get; set; }
    }
}
View Code

4、 Student類

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MvcApplication1.Data
{
    public partial class Student:IAudited
    {
       
    }
}
View Code

5、 DbEntity類

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Linq;

namespace MvcApplication1.Data
{
    public abstract class DbEntity
    {
        public virtual void OnSaving(ChangeAction changeAction)
        {
            var auditEntity = this as IAudited;

            if (auditEntity != null)
            {
                if ((changeAction == ChangeAction.Update) || (changeAction == ChangeAction.Insert))
                {
                    auditEntity.LastUpdateOn = DateTime.Now;

                    if (changeAction == ChangeAction.Insert)
                    {
                        auditEntity.CreateOn = auditEntity.LastUpdateOn;
                    }

                }
            }
        }

        public virtual void OnSaved() { }
    }
}
View Code

6、 設置使數據庫實體類全部繼承DbEntity,先關閉Db.dbml(切記必須關閉),選擇Db.Dbml文件  右鍵--打開為--選擇XML格式—OK

在第一行添加EntityBase="DbEntity"

這時打開Db.designer.cs,可以看到所有的實體類都繼承了DbEntity

8、打開Db.dbml在空白處點擊右鍵,選擇屬性,修改Name為Db,再在打開的Db.dbml空白處點擊右鍵—View Code,在Db.cs中寫操作數據庫代碼。

9、調用

 private void Add()
        {
            using (var db = Db.Open())
            {
                Student c = new  Student();
                c.Code = "001";
                c.Name = "一班";
                db.Students.InsertOnSubmit(c);
                db.SubmitChanges();
            }
        }
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM