【问题标题】:CRUD in Winforms with linq-to-sql带有 linq-to-sql 的 Winforms 中的 CRUD
【发布时间】:2010-07-31 05:39:06
【问题描述】:

我有一个简单的 winforms 应用程序,我正在使用 linq-to-sql 连接到我的数据库。

我直接从数据库中生成了类,并且我有一个 DataAccess 类,它包装了我的数据上下文,可以给我任何我需要的东西。

我有一个视图,它使用对象数据源为我的实体填充 DataGridView 和一组相关的文本字段等(我们称之为 EmployeeView)

视图加载所有现有行,当我单击网格时,字段会相应更新。

如果我更改字段,更改将通过记录更改保留,但我不确定如何通过我的数据访问层保存更改。如何检测哪些记录是脏的并且需要保存?然后我该如何保存它们?添加新记录的最佳方法是什么?删除记录?

我可以在网上找到很多资源,但没有我需要的示例。任何人都可以帮助我了解一些基本模式,或者指出一个好地方吗?

【问题讨论】:

    标签: winforms linq-to-sql datagridview crud


    【解决方案1】:

    我相信,使用 LINQ-to-SQL 类的最基本方法是实例化它们的列表(例如,让我们使用 Employee)来包含您希望(可能)编辑的Employees。当这些 Employee 对象的属性发生变化时,这些对象会自动“变脏”,并且对 DataContext.SubmitChanges() 的调用将使它们持久化。

    List<Employee> employees = (from e in dataContext.Employees where e.Salary > 50000 select e).toList();
    
    foreach(var employee in employees)
    {
      employee.CanAffordToyotaPrius = true;
    }
    
    dataContext.SubmitChanges();
    

    如果您包装 DataContext 并且仅使用 DataGridView 更改包装对象的属性,则需要某种方法将这些更改向下注入到您在选择数据时使用的基础 LINQ-to-SQL 对象中.例如,您可以使用包装器属性上的 setter 来设置底层 LtS 对象的属性。

    【讨论】:

    • 您可能会认为我选择的布尔属性是虚假的……但这是具有环保意识的选择。 ;)
    • 我仍在使用从数据上下文中获得的对象,所以这个解决方案似乎工作得很好。但是添加和删除呢?
    • 一定要看看 MSDN 关于 CRUD with Linq-to-SQL 的文章:msdn.microsoft.com/en-us/library/bb386931.aspx 基本上,都是关于操作那些 LtS 对象的。您可以直接对 LtS 表使用 InsertOnSubmit(Employee e)DeleteOnSubmit(Employee e) 等方法(即dataContext.Employees.InsertOnSubmit(new Employee() {...})),也可以从通过 LINQ 检索的 Employee 集合中添加/删除员工。
    猜你喜欢
    • 2011-07-18
    • 1970-01-01
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多