2017-08-17 28 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類