1

我正在学习LINQ/EF,我已经编码了以下片段。创建/读取/更新工作,但删除引发InvalidOperationException。当我将鼠标悬停在错误上时,它显示了Customer对象的空值。Gridview ObjectDataSource InvalidOperationException当删除

有什么想法?

HTML代码

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
    DataSourceID="CustomersODS"> 
    <Columns> 
     <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" /> 
     <asp:BoundField DataField="ID" HeaderText="ID" SortExpression="ID" /> 
     <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" /> 
    </Columns> 
</asp:GridView> 
<asp:ObjectDataSource ID="CustomersODS" runat="server" 
    DataObjectTypeName="CustOrderTest.Models.Customer" 
    DeleteMethod="Customer_Delete" SelectMethod="Customers_GetAll" 
    TypeName="CustOrderTest.Models.CustomerModel" UpdateMethod="Customer_Update"> 
</asp:ObjectDataSource> 

法库

namespace CustOrderTest.Models 
{ 
    public class CustomerModel 
    { 

     COContext DB = new COContext(); 

     public List<Customer> Customers_GetAll() 
     { 
      return (from customer in DB.Customers 
        select customer).ToList(); 
     } 

     public List<Customer> Customers_Search(string CustomerName) 
     { 
      return (from customer in DB.Customers 
        where customer.Name.Contains(CustomerName) 
        select customer).ToList(); 
     } 

     public Customer Customer_GetByID(int? ID) 
     { 
      return (from customer in DB.Customers 
        where customer.ID == ID 
        select customer).FirstOrDefault(); 
     } 

     public void Customer_Update(Customer customer) 
     { 
      DB.Entry(customer).State = EntityState.Modified; 
      DB.SaveChanges(); 
     } 

     public void Customer_Insert(Customer customer) 
     { 
      DB.Customers.Add(customer); 
      DB.SaveChanges(); 
     } 

     public void Customer_Delete(Customer customer) 
     { 
      DB.Customers.Remove(customer); 
      DB.SaveChanges(); 
     } 


    } 
} 

数据模型//

namespace CustOrderTest.Models 
{ 
    public class Customer 
    { 
     public int ID { get; set; } 
     public string Name { get; set; } 
    } 
    public class CustomerOrder 
    { 
     public int ID { get; set; } 
     public Customer Customer { get; set; } 
     public DateTime OrderDate { get; set; } 
     public int MyProperty { get; set; } 
     public List<CustomerOrderDetail> OrderDetails { get; set; } 
    } 

    public class CustomerOrderDetail 
    { 
     public int ID { get; set; } 
     public string Part { get; set; } 
     public int Quantity { get; set; } 
     public double Price { get; set; } 

    } 

    public class COContext : DbContext 
    { 
     public DbSet<Customer> Customers { get; set; } 
     public DbSet<CustomerOrder> CustomerOrders { get; set; } 
     public DbSet<CustomerOrderDetail> OrderDetails { get; set; } 
    } 

} 
+0

您必须提供完整的错误消息。 – 2011-05-31 20:30:38

回答

3

愚蠢的错误 - 在这里就是答案。 如果您收到此错误最可能的是你没有specity的的DataKeyNames

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ID" DataSourceID="CustomersODS">