ASP.NET MVC5實現芒果分銷後臺管理系統(二):Code First快速集成EntityFramework

在上一篇文章中,咱們已經搭建了整個芒果後臺管理系統整個工程架構,並集成了AutoMapper,日誌組件等,接下來咱們將使用Entity Framework完善系統的持久化存儲部分。這篇EF的構造,我將以一種快速集成的方式實現,並提供超多的Linq公共方法供業務使用。sql

Nuget引入EF

在XiaoMo.Repository工程裏,右鍵工程使用Nuget引入EntityFramework ,這裏我使用最新的6.4版本數據庫

file

在XiaoMo.Service的Web.config裏,添加Sql Server鏈接字符串(AppSetting內)後端

<add key="conStr" value="Server=10.60.215.202;Database=mango_sys;Persist Security Info=True;User ID=sa;Password=**" />

建立表架構

建立表以及Entity

file

對應Entityapp

[Table("Orders")]

public class OrderInfoEntity
{
    public int Id { get; set; }
    public DateTime OptTime { get; set; }
    public string Address { get; set; }
    public string Uuid { get; set; }
    public string AcceptUser { get; set; }
    public string TelephoneNumber { get; set; }
    public string ProductName { get; set; }
    public int Number { get; set; }
    public double Price { get; set; }
    public double Sum { get; set; }
    public string PackCompany { get; set; }
    public string PackNumber { get; set; }
    public string Status { get; set; }
    public string ExpressNumber { get; set; }
    
}

EF關鍵配置

建立數據庫交互上下文DatabaseContext.cs,初始化時指定鏈接。這裏由於咱們先用數據庫表,因此咱們使用Database.SetInitializer<DatebaseContext>(null); 使用空策略初始化EF 。添加DBSet,用於操做表。框架

public class DatebaseContext : DbContext
{
    static string ConnectionString = "";
    static DatebaseContext()
    {
        Database.SetInitializer<DatebaseContext>(null);
    }

    public DatebaseContext(string connStr)
      : base(connStr)
    {
    }

    public DatebaseContext()
        : base(GetConnectionString())
    {

    }

    private static string GetConnectionString()
    {
        if (string.IsNullOrEmpty(ConnectionString))
        {
            ConnectionString = ConfigurationManager.AppSettings["conStr"].ToString();
        }
        return ConnectionString;
    }

    public virtual DbSet<OrderInfoEntity> Records { get; set; }
    public virtual DbSet<UsersEntity> User { get; set; }
}

添加數據交互接口,這裏只列出幾個關鍵接口方法工具

public interface IRepository{}

    public interface IRepository<TEntity> : IRepository where TEntity : class

//methodsui

T Query<T>(Func<IQueryable<TEntity>, T> queryMethod);
    TEntity FirstOrDefault(Expression<Func<TEntity, bool>> predicate);
    TEntity Load<TPrimaryKey>(TPrimaryKey id);
    bool Exist(Expression<Func<TEntity, bool>> predicte);
    TEntity Insert(TEntity entity);
    TEntity Update(TEntity entity);

建立RepositoryManager.cs,封裝DatabaseContext,並實現CRUDspa

public class RepositoryManager : IDisposable

建立RepositoryEntityBase.cs,做爲全部Dao層的公共基類,以供繼承映射數據庫實體。代理

public class RepositoryEntityBase<TEntity> : IRepository<TEntity> where TEntity : class

建立OrderDao

public class OrdersDao : RepositoryEntityBase<OrderInfoEntity>

這兩個文件內容過多,我就不粘貼到這了。

業務訪問持久化邏輯

列舉幾個使用集成好的EF框架交互的例子

1.查詢當前用戶是否爲代理

public bool IsAgent(string username)
    {
        using (var repMgr = new RepositoryManager())
        {
            return repMgr.Exist<UsersEntity>(u => u.UserName == username && u.Role == 1);

        }
    }

2.判斷用戶名密碼是否正確

public string SearchUser(string username,string pwd)
    {
        using (var repMgr = new RepositoryManager())
        {
            var queryuser = repMgr.FirstOrDefault<UsersEntity>(u => u.UserName == username && u.Password == pwd);
        }
    }

3.分頁查詢訂單

public QueryResponse Query(QueryRequest request)
    {
        using (var repMgr = new RepositoryManager())
        {
            var response = new QueryResponse();
            var query = repMgr.Query<OrderInfoEntity>();
                            int count = query.Count();
                             var results = query.OrderByDescending(s => s.OptTime).Skip((request.CurrentPage - 1) * request.PageSize).Take(request.PageSize);

            var entities = results.ToList();
            response.TotalCount = count;
            response.Result = entities.ConvertAll(Mapper.Map<OrderInfoEntity, OrderInfo>);
            return response;
            }
        }

4.建立訂單

public OrderInfo CreateOrder(OrderInfo order)
    {
        using (var repMgr = new RepositoryManager())
        {
                var entity = Mapper.Map<OrderInfo, OrderInfoEntity>(order);
                repMgr.Insert(entity);
                repMgr.Commit();
                order.Id = entity.Id;
        }
    }

整個數據庫的查詢和操做至關簡單。這裏您可能會問,若是有一些複雜的Sql語句,要怎麼寫,這裏咱們在RepositoryManager.cs裏提供執行Sql語句的方法,只須要把sql與參數傳遞進來便可

public int ExecuteSqlCommand(string sql, params object[] args)
    {
        return Context.Database.ExecuteSqlCommand(sql, args);
    }

若是有新的業務接入,那咱們只須要在DatebaseContext中加入新的DBSet,建立對應Entity與表,其餘不須要任何改動,整個EF的接入是超級便捷的。

結語

以上爲你們實現系統集成EF的關鍵配置代碼,因爲篇幅較長,部分源碼我並未粘貼全,你們若是感興趣,能夠私信小墨公衆號,聯繫,下一節咱們將繼續芒果系統的快速搭建,IOC集成Castle。整個系列我將面向入門級新手,以實戰乾貨角度爲你們陸續呈現,以後將爲你們呈現以.Net Core MVC姿式構建系列,但願你們支持。如需源碼,請關注或搜索小墨公衆號"後端技術乾貨大全",私信做者,以獲取更多小墨技術文章及程序人生!

感謝閱讀!

file

感謝閱讀!

本文由博客羣發一文多發等運營工具平臺 OpenWrite 發佈
相關文章
相關標籤/搜索