2017-05-30 8 views
0

私はいくつかのEFチュートリアルを見ましたが、いくつかを理解することはできません。私は現在、ADOを使用してSQLサーバーデータベースと対話する.netテストプロジェクトに取り組んでいます。 ADOの部分をエンティティフレームワークに渡す必要があります。 私は現在、ビジネス、オブジェクト、DataAcessの3つのレイヤーを扱っています。ADOからEntity FrameworkへのASP/C#

私は、私のWebサイトからEmployeeテーブルを更新するための次のクエリを持っています。それは動作しますが、Linqを使用してこれをEntity Frameworkに渡したいと思います。私はこのようないくつかのケースをinsertとselectで持っていますが、これを一度ソートすることができたら、それらを理解することができます。

注:DataAccessクラスは既にEntityフレームワークを使用してデータベースに接続されており、エンティティリストオブジェクトはListEntitiesと呼ばれています。

SqlConnection conn = new SqlConnection(); 
try 
{ 
    SqlCommand comm; 
    string connectionString = ConfigurationManager.ConnectionStrings["Test"].ConnectionString; 

    conn = new SqlConnection(connectionString); 

    comm = new SqlCommand("UPDATE Employee SET [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected] WHERE [email protected]", conn); 
    comm.Parameters.Add("@Name", 
    System.Data.SqlDbType.VarChar, 70); 
    comm.Parameters["@Name"].Value = User.Name; 

    comm.Parameters.Add("@Lname", 
    System.Data.SqlDbType.VarChar, 70); 
    comm.Parameters["@Lname"].Value = User.Lname; 

    comm.Parameters.Add("@Age", 
    System.Data.SqlDbType.Int); 
    comm.Parameters["@Age"].Value = User.Age; 

    comm.Parameters.Add("@Email", 
    System.Data.SqlDbType.NVarChar, 70); 
    comm.Parameters["@Email"].Value = User.Email; 

    comm.Parameters.Add("@AYear", 
    System.Data.SqlDbType.Int); 
    comm.Parameters["@Year"].Value = User.Year; 

    comm.Parameters.Add("@ColorID", 
    System.Data.SqlDbType.Int); 
    comm.Parameters["@ColorID"].Value = User.ColorID; 

    comm.Parameters.Add("@AvatarID", 
    System.Data.SqlDbType.Int); 
    comm.Parameters["@AvatarID"].Value = User.AvatarID; 

    comm.Parameters.Add("@EmployeeID", 
    System.Data.SqlDbType.Int); 
    comm.Parameters["@EmployeeID"].Value = User.UserID; 

    conn.Open(); 
    comm.ExecuteNonQuery(); 
} 
catch (Exception ex) 
{ 
    throw ex; 
} 
finally 
{ 
    conn.Close(); 
} 
+1

再スローする場合は例外をキャッチしないでください。それには何の意味もありません。捕獲された例外に対して 'throw ex;'をしないと、スタックトレースが失われます。ちょうど 'スローする '。 – mason

+0

FYIコレクションの参照を保存するには、 'comm.Parameters.Add(" @ Name "、System.Data.SqlDbType.VarChar、70).Value = User.Name;'を1行にすることができます。 –

+0

本当に私が尋ねたことはありませんが、知っておきたいことです。 –

答えて

1

私はあなたが言ったことを理解しなかったかどうかわからないが、私はあなたがEntityFrameworkに言及したこの純粋ADOを翻訳したいと思います。この例ではEFのステップが何であるかもわかりませんので、すべてのステップをリストアップします。

1-あなたは、パッケージマネージャを使用して(3層の上に)entityframeworkパッケージをインストールする必要がありますが、DbContext

、3-から延びている例のDataContextのコンテキストを作成する必要が

2 - 作成DbSet従業員、そしてそのプロパティ

public class DataContext : DbContext 
{ 
    public DbSet<Employee> Employees {get; set;} 
} 

、4-そして最後に更新を行うと、クラスの従業員

Employee emp = DataContext.Employees.FirstOrDefault(r=>r.EmployeeID == User.UserID); 
emp.Name = User.Name; 
emp.Age = User.Age; 
... 
DataContext.SaveChanges(); 
+0

「r」とはどういう意味ですか? –

+1

これはlamda式と呼ばれ、すべてのROWがこの条件を満たしている行を取得することを意味します:ROW.EmployeeID == User.UserID、たとえばFirstOrDefault(p => p.EmployeeID = = User.UserID) –

関連する問題