Linq 删除时Gridview ObjectDataSource InvalidOperationException
我正在学习LINQ/EF,并编写了以下代码片段。创建/读取/更新工作,但删除引发InvalidOperationException。当我将鼠标移到错误上方时,它会显示Customer对象的空值 有什么想法吗 HTML代码Linq 删除时Gridview ObjectDataSource InvalidOperationException,linq,entity-framework,gridview,invalidoperationexception,Linq,Entity Framework,Gridview,Invalidoperationexception,我正在学习LINQ/EF,并编写了以下代码片段。创建/读取/更新工作,但删除引发InvalidOperationException。当我将鼠标移到错误上方时,它会显示Customer对象的空值 有什么想法吗 HTML代码 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="CustomersODS"> <Columns>
<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 customertest.Models
{
公共类CustomerModel
{
COContext DB=新的COContext();
公开名单客户_GetAll()
{
返回(来自数据库客户中的客户)
选择customer.ToList();
}
公共列表客户搜索(字符串CustomerName)
{
返回(来自数据库客户中的客户)
其中customer.Name.Contains(CustomerName)
选择customer.ToList();
}
公共客户客户获取ID(int?ID)
{
返回(来自数据库客户中的客户)
其中customer.ID==ID
选择customer).FirstOrDefault();
}
公共作废客户更新(客户)
{
DB.Entry(customer.State=EntityState.Modified;
DB.SaveChanges();
}
公共作废客户插入(客户)
{
DB.Customers.Add(客户);
DB.SaveChanges();
}
公共作废客户\删除(客户)
{
DB.Customers.Remove(客户);
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; }
}
}
namespace customertest.Models
{
公共类客户
{
公共int ID{get;set;}
公共字符串名称{get;set;}
}
公共类客户订单
{
公共int ID{get;set;}
公共客户客户{get;set;}
public DateTime OrderDate{get;set;}
公共int MyProperty{get;set;}
公共列表OrderDetails{get;set;}
}
公共类CustomerOrderDetail
{
公共int ID{get;set;}
公共字符串部分{get;set;}
公共整数数量{get;set;}
公共双价{get;set;}
}
公共类COContext:DbContext
{
公共数据库集客户{get;set;}
公共数据库集客户订单{get;set;}
公共DbSet OrderDetails{get;set;}
}
}
愚蠢的错误-以下是答案。
如果出现此错误,则很可能是您没有指定DataKeyName
您必须提供完整的错误消息。
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ID" DataSourceID="CustomersODS">