2017-01-21 15 views
0

私はMVC、Entityフレームワークアプリケーションに非常に慣れていて、まだ学んでいます。私は質問があります。 ストアドプロシージャでEntity FrameworkとMVCアプリケーションを使用してSQLサーバーデータベースに値を挿入します。私はDBの最初のアプローチを使用しています。なぜ私は値を挿入するための手続きを書いたとしても、select文を追加する必要があるのか​​と尋ねたい。 select文を書くのではなく、エラーをスローします。エンティティフレームワークMVCアプリケーションを使用してSQL Serverデータベースに値を挿入してもselect文を使用する理由

タイプ「System.Data.Entity.Core.EntityCommandExecutionException」の例外がEntityFramework.SqlServer.dllで発生したが、ユーザーコード 追加情報で処理されなかった。データリーダは、指定された「EmployeeDBModelと互換性がありません。従業員'。タイプ 'Id'のメンバーには、同じ名前のデータリーダーに対応する列がありません。

ALTER PROCEDURE [dbo].[sp_InsertEmployees] 
    -- Add the parameters for the stored procedure here 
    @FirstName varchar(50), 
    @LastName varchar(50), 
    @Address varchar(50), 
    @Salary int 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 
    -- Insert statements for procedure here 
    Insert into Employee values(@FirstName,@LastName,@Address,@Salary) 

    --select scope_identity() as Id,Firstname,LastName,Address,Salary from Employee 
END 

私はそれだけで仕事selectコマンドのコメントを解除した場合。

注: - Id ID列とオートシードが真

モデルです: -

public partial class Employee 
{ 
    public int Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string Address { get; set; } 
    public Nullable<int> Salary { get; set; } 
} 

コントローラー

[HttpPost] 
public ActionResult Create(Employee emp) 
{ 
    using (EmployeeDBEntities db = new EmployeeDBEntities()) 
    { 
     if (ModelState.IsValid) 
     { 
      db.InsertEmpDetail(emp.FirstName, emp.LastName, emp.Address, emp.Salary); 
      db.SaveChanges(); 
      ViewBag.Message = "New Employee Created Successfully!!"; 
     } 
    } 
    return View(emp); 
} 

私は機能InsertEmpDetailを作成し、正しくマップしました。

答えて

0

エンティティをマップするときに、間違って覚えていないと、ormエンティティ・フレームワークがcertaionの方法でエンティティを読み取ることができる必要があります。 (申し訳ありませんが、私のネットコンピュータにアクセスすることはできませんが、それはしばしば同じjava)。

私はあなたのプロシージャに戻り結果があると推測しているので、エンティティに読み込まれます。

もう1つの可能性は、挿入が正しく行われた後に読み取ることができないため、列が欠落しているように見えるため、ストアドプロシージャのコミットです。

(ちょうどこの前に私に起こるしていると言って)

幸運、 EDD

関連する問題