2017-08-17 55 views
-3

我一直在研究已经使用了18年的网站。从基于存储过程的站点移动到ADO.NET实体框架模型

当前,无论何时我们想要编写调用信息的方法来从数据库中调用信息,我们都必须创建多个方法和存储过程以转换为对象。

private static DataTable GetAddress(int ownerId) 
    { 
     using (var sql = SqlWrapper.CreateOrUpdateWrapper(AdapterType.SqlCommand, CommandType.StoredProcedure, "Address_LoadById")) 
     { 
       sql.AddParameterWithValue("@id", ownerId, SqlDbType.Int); 

      sql.Open(); 
      var dt = new DataTable(); 
      dt.Load(sql.ExecuteReader()); 
      return dt; 


     } 
    } 

    private static List<Address> LoadAddressesByItemId(int ownerId, bool loadContact) 
    { 

     List<Address> addresses = new List<Address>(); 
     var dt = GetAddress(ownerId); 
     if (dt == null || dt.Rows.Count <= 0) return addresses; 
     foreach (DataRow dr in dt.Rows) 
     { 
      addresses.Add(new Address(dr, loadContact)); 
     } 

     return addresses; 
    } 

    private Address(DataRow dr, bool getContact = true) 
    { 

     AddressID = Convert.ToInt32(dr["AddressID"]); 
     AddressType = (AddressTypes)(Convert.ToInt32(dr["addressType"])); 
     AddressLineOne = dr.GetString("addressLine1"); 
     AddressLineTwo = dr.GetString("addressLine2"); 
     AddressLineThree = dr.GetString("addressLine3"); 
     Town = dr.GetString("town"); 
     County = dr.GetString("County"); 
     Country = dr.GetString("Country"); 
     PostCode = dr.GetString("Postcode"); 
     OwnerId = Convert.ToInt32(dr["OwnerId"]); 
    } 

就我个人而言,我觉得这很长,想移到实体框架。如下所示。

public static List<Address> GetAddressesByID(int ownerId) 
    { 
     return DBContext.Addresses.Where(a => a.OwnerId == ownerId).ToList(); 
    } 

我该怎么去做这件事,班级图书馆是200多班。所以我想只将类转换为仅在为该类编写新代码或者链接到该类时使用EF。

对于上面的例子,我想使用现有的存储过程代码独立保留Owner类,并更新地址,因此它使用实体框架和Linq。

有没有人知道一种方法来开始使用EF 6 mid项目,并且只在需要时将EF6应用于新类和旧类,而无需编辑整个类库。

+0

没有人可以在没有任何代码的情况下回答这个问题更多背景信息。此外,如果没有人可以用来创建示例性解决方案的例子,很难回答这个问题。请添加这些信息,并至少为您的问题提供一些格式。 – user2154065

回答

0

最近,我们遇到了类似的情况,要调用存储过程的查询操作,您可以使用SqlQuery类中的EntityFramework这是非常有帮助的

_dbContext.Database.SqlQuery<EntityType>("sp_name",parameters).ToList(); 

有关的ExecuteNonQuery操作(交易),您可以使用

_dbContext.Database.ExecuteSqlCommand( 
         @"UPDATE tblname SET Rating = 5" + 
          " WHERE Name LIKE '%Entity Framework%'" 
         ); 

请注意,Context类的_dbContext对象继承自DbContext Entityframework类