2017-08-17 9 views
-3

私は18年間アップしているWebサイトで作業しています。ストアドプロシージャベースのサイトから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を使用するようにクラスを変換したいと思います。

上記の例では、既存のストアドプロシージャコードを使用してオーナークラスだけを残し、アドレスを更新してエンティティフレームワークとLinqを使用したいと考えています。

EF 6 midプロジェクトの使用を開始し、クラスライブラリ全体を編集することなくEF6を新しいクラスと古いクラスに適用する方法を知っている人はいますか?

+0

コードなしで誰もこれに答えることはできません。より多くの背景情報。また、模範的な解決策を作成するために使用できる例がないと、これに答えることは非常に難しいです。この情報と少なくともいくつかの書式を質問に追加してください。 – user2154065

答えて

0

は最近、我々はあなたが

は、ExecuteNonQuery操作(取引)については
_dbContext.Database.SqlQuery<EntityType>("sp_name",parameters).ToList(); 

あなたが使用できる非常に便利ですEntityframeworkでのSQLQueryを使用することができますクエリ操作のためのストアドプロシージャを呼び出すには、似たような状況に直面した

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

Contextクラスの_dbContextオブジェクトがDbContextクラスのEntityframeworkから継承することに注意してください。

関連する問題