2011-08-15 12 views
0

エンティティを削除しようとすると異常なエラーが発生します。エラーエンティティオブジェクトを削除するときに「値はnullではありませんパラメータ名:エンティティ」

public class EmployeesController : Controller 
{ 
    readonly IEmployeesRepository _employeesRepository; 

    public EmployeesController() 
    { 
     _employeesRepository = new SqlEmployeesRepository(); 
    } 

    public RedirectToRouteResult Delete(int id) 
    { 
     var employee = _employeesRepository.GetEmployee(id); 
     _employeesRepository.DeleteEmployee(employee); 
     TempData["message"] = employee.Name + " was deleted"; 
     return RedirectToAction("Index"); 
    } 
} 

とリポジトリコード:

public class SqlEmployeesRepository : IEmployeesRepository 
{ 
    private readonly MyDBEntities _entities; 

    public SqlAgencyTypesRepository() 
    {    
     _entities = new MyDBEntities(); 
    } 


    public IQueryable<Employee> Employees 
    { 
     get { return _entities.Employees.AsQueryable(); } 
    } 


    public Employee GetEmployee(int id) 
    { 
     return Employees.FirstOrDefault(e => e.EmployeeID == id); 
    } 


    public void DeleteEmployee(Employee employee) 
    { 
     _entities.Employees.Context.DeleteObject(employee); 
     _entities.Employees.Context.SaveChanges(); 
    } 
} 
私はEntity Frameworkの4を使用しています、C#とASP.NET MVC 3

は、ここに私のコントローラとエンティティオブジェクトを削除する機能です

カップルの奇妙なもの:

  • アイテムが削除されます。 DeleteObject行でエラーが発生しますが、それでも削除されています。
  • これはローカルマシンでは発生しません。本番環境でのみ発生します。 2つの唯一の違いは、接続文字列です。誰もがここで何が起こっているか知っている

    <!-- Local conn string --> 
    <!--<add name="MyDBEntities" connectionString="metadata=res://*/Entities.MyDB.csdl|res://*/Entities.MyDB.ssdl|res://*/Entities.MyDB.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\MyDB.mdf;Integrated Security=True;User Instance=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />--> 
    
    <!-- Production conn string --> 
    <add name="MyDBEntities" connectionString="metadata=res://*/Entities.MyDB.csdl|res://*/Entities.MyDB.ssdl|res://*/Entities.MyDB.msl;provider=System.Data.SqlClient;provider connection string=&quot;Server=mysite.com;Database=MyDB;User ID=***;Password=***;Trusted_Connection=True;Integrated Security=False;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" /> 
    

+0

プロダクションとローカルインスタンスでテーブル制約も同じですか? – aL3891

+0

はい、両方のデータベースがまったく同じです。 – Steven

答えて

2

GetEmployeeでFirstOrDefaultの代わりにSingleを使用します。これは、一致するIDを持つレコードが存在しないことに関連する問題を排除するのに役立ちます。あなたが使用する必要があります私の意見では

0

:あなたの「従業員」は、このオブジェクトを削除防ぐことができる外部キー参照を持っていない場合、削除()の代わりにContext.DeleteObjectの()

_entities.Employees.Remove(employee); _entities.SaveChanges();

もチェック。