從LINQ2SQL升級Entity Framework


 函數對照表

 

LINQ 2 SQLEF注釋
DataContextObjectContext 
.SubmitChanges.SaveChanges 
.GetTable<>.CreateObjectSet<> 
Table<T>ObjectSet<T> 
.InsertOnSubmit.InsertObject 
.InsertAllOnSubmit 
.DeleteOnSubmit.DeleteObject 
.DeleteAllOnSubmit 
.LoadWithInclude但參數不同

從表中看出,我們需要補3個Extension Method。

前兩個好辦,用Foreach調用InsertObject和DeleteObject即可:

        public static void DeleteAllOnSubmit<TEntity>(this ObjectSet<TEntity> table, IEnumerable<TEntity> entities)
            where TEntity : class, new()
        {
            foreach (TEntity entity in entities)
            {
                table.Detach(entity);
            }
        }

        public static void InsertAllOnSubmit<TEntity>(this ObjectSet<TEntity> table, IEnumerable<TEntity> entities)
            where TEntity : class, new()
        {
            foreach (TEntity entity in entities)
            {
                table.AddObject(entity);
            }
        }


 

LoadWith轉成Include就麻煩的,LoadWith的參數是Expression<Func<T, object>> expression,而Include的參數是string,我想不通,我們偉大的微軟怎麼會用String做參數!好吧,那就只能反射了

 

 

        public static ObjectQuery<T> Include<T>(this ObjectQuery<T> mainQuery, Expression<Func<T, object>> subSelector)
        {
            return mainQuery.Include(((subSelector.Body as MemberExpression).Member as System.Reflection.PropertyInfo).Name);
        }


其實,多人開發時,還會遇到文件被遷出的問題,這時,可以用Extension Method保證函數名不改,程式仍可用,如下:

 

    public static class Linq2EFExtensions
    {
        public static void ExecuteCommand(this ObjectContext context, string sql)
        {
            context.ExecuteStoreCommand(sql);
        }

        public static void ExecuteCommand(this ObjectContext context, string sql, params string[] parameters)
        {
            context.ExecuteStoreCommand(sql, parameters);
        }

        public static IEnumerable<TEntity> ExecuteQuery<TEntity>(this ObjectContext context, string sql, params string[] parameters)
        {
            return context.ExecuteStoreQuery<TEntity>(sql, parameters);
        }

        public static void InsertOnSubmit<TEntity>(this ObjectSet<TEntity> table, TEntity entity)
            where TEntity : class, new()
        {
            table.AddObject(entity);
        }

        public static void DeleteOnSubmit<TEntity>(this ObjectSet<TEntity> table, TEntity entity)
            where TEntity : class, new()
        {
            table.DeleteObject(entity);
        }
    }


 

好,經過幾個步驟,完成了從LINQ2SQL升級Entity Framework。

 

問題,在Entity Framework中,帶下划線的表,如User_Role不能的變成User_Roles,而Linq 2 Sql可以,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

织网者Eric

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值