Linq/数据对象最佳实践

Linq/数据对象最佳实践,linq,data-entry,Linq,Data Entry,我是一名新的asp.net程序员,我刚刚问过谁给我留下了一个更通用的 关于Linq和数据对象,当前的最佳实践是什么?具体到什么时候,;变暗、变新并处理它们 另外,在同一页面上的许多不同范围中使用的对象(例如用户数据对象)又如何呢。它们应该是模块级的还是在每个范围中创建的 如果有人能给我一些关于当前最佳实践的注释,甚至是一篇描述它们的文章的链接,我将不胜感激。通常,您希望将正在操作的数据作为参数传递给函数,并将类型依赖项作为构造函数参数传递给函数。例如,linq数据上下文可能是您的类型操作所依赖的

我是一名新的asp.net程序员,我刚刚问过谁给我留下了一个更通用的

关于Linq和数据对象,当前的最佳实践是什么?具体到什么时候,;变暗、变新并处理它们

另外,在同一页面上的许多不同范围中使用的对象(例如用户数据对象)又如何呢。它们应该是模块级的还是在每个范围中创建的


如果有人能给我一些关于当前最佳实践的注释,甚至是一篇描述它们的文章的链接,我将不胜感激。

通常,您希望将正在操作的数据作为参数传递给函数,并将类型依赖项作为构造函数参数传递给函数。例如,linq数据上下文可能是您的类型操作所依赖的内容,因此应该被注入构造函数中。用于在上下文中查找数据的值将快速更改,并在同一上下文中重复使用,因此将成为类型上的函数参数

如果您的类型是为了在其生存期内在多个上下文中执行操作而构建的,那么您可以考虑将上下文作为函数参数传递,但这可能比其他任何东西更能说明设计问题。

至于在类型的函数作用域内实例化数据上下文,实际上没有任何理由在函数中有这种开销,除非类型的生存期保证只持续函数调用本身的生存期。即使现在是这样,在将来的某个时候也可能不是这样,因此最好在设计你的类型时考虑到这种情况。

快速思考(我正在开会,我太糟糕了)

对于ASP.NET,数据上下文的最大生存期为一次发布或回发。您可以创建更多,但它们都将随着页面卸载而消失。是的,你应该明确地处理它们;using语句是处理该问题的最佳方法,因为它将在块结束时自动调用dispose:

using (NorthwindModel nw = new NorthwindModel())
{
    do stuff
}
从LINQ查询返回的数据不会随数据上下文一起消失,但此时它不再连接到上下文,并且不能再使用更改来更新数据库。(您始终可以创建新上下文,然后作为新对象附加,或重新查询和合并更改,或任何满足您需要的内容。)

请注意,LINQ查询在需要计算数据之前不会执行。在处理数据上下文时保留查询是一个非常容易的错误,而当查询需要运行时,它就不能运行,因为它是使用不再存在的数据上下文创建的。有两种方法可以解决这个问题

  • 在数据上下文的using块内处理查询结果
  • 强制执行查询,通常使用.ToList()或其他生成数据集合的方法:

    列出myCustomers=(从nw中的c开始。Customers选择c).ToList()

  • 这将运行查询,将数据复制到可枚举集合中,并为您提供可返回给方法调用方的集合。但是,这些对象现在与上下文分离,因此不能用于更新

    如果使用LINQ执行CRUD,最好使用一个数据上下文进行所有更新、删除和插入,然后对所有更改调用SubmitChanges()。这确保它们作为单个事务运行。(如果尚未运行事务,则数据上下文将为每个SubmitChanges调用生成一个事务。)

    如果要在查询中选择一项,请使用FirstOrDefault()而不是First()。如果没有任何内容符合选择条件,First()将抛出和异常,而FirstOrDefault()将返回null。知道这个很有用

    除此之外,享受乐趣,尝试很多东西。LINQ将改变您对数据的思考方式