将DataContext对象作为'ref'参数传递的缺点吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将DataContext对象作为'ref'参数传递的缺点吗?相关的知识,希望对你有一定的参考价值。
因此,在我的EF4项目中,我打开了DataContext文件本身的部分类,以及由DataContext生成的几个表/对象。但是,如果我打开“ Products”类作为部分类,则(据我所知)没有从产品到产生它的DataContext类的直接链接。
public partial class Product
{
public DataContext GetContext()
{
return this.DataContext;
// FAILS!!! No connection from 'this' to DataContext
// makes sense because "Product" isn't REALLY derived from DataContext
//...but still, I want this to work!
}
}
但是在部分产品类中,我当然希望能够直接查询数据库,而且我真的很希望能够仅初始化一个DataContext实例并将其用于我的aspx.cs页面查询,以及从aspx.cs页面调用的部分类执行的查询。
因此,到目前为止,我的解决方案是将DataContext的实例作为“ ref”参数传递给需要在数据库中四处摸索的我的局部类的方法。这是局部类:
public partial class Complaint
{
public IEnumerable<Person> GetPByRole(InvestigationRole roleEnum, ref DataContext dbase)
{
var role = dbase.GetRole(roleEnum);
return this.PeopleOnInvestigations
.Where(x => x.InvestigationRoleID == 1)
.Select(x => x.Person);
}
}
[[因此,将我的DataContext对象作为ref参数传递给需要通过此连接访问数据库的任何局部类方法的弊端?缺点之一是,一旦将它作为ref传入,我可以从这些局部类中为它添加新实体,然后在asp.cs页面上进行SaveChanges调用后,所有更改(从aspx和局部类方法)都将执行。 >
因此,在我的EF4项目中,我打开了DataContext文件本身的部分类,以及由DataContext生成的几个表/对象。但是,如果我打开一个“产品” ...ref
变量用于更改包含引用的变量。但是由于您没有在DataContext dbase
方法中更改GetPByRole
引用,因此将其作为ref
传递是没有用的,只会使其他开发人员感到困惑。也许您误解了值类型和引用类型。引用类型(例如DataContext
)始终通过引用传递,通过方法调用传递它不会生成对象本身的新副本,而只是引用的副本(32位或64位值)。您正在混合职责。您的Product
类是一个实体,但是您似乎正在其上实现所有类型的数据检索方法。这将很快变成一团糟。给系统中的每个班级一个责任。 Person
类的职责是当一个人。
以上是关于将DataContext对象作为'ref'参数传递的缺点吗?的主要内容,如果未能解决你的问题,请参考以下文章
在 WPF 中使用 DataContext 作为 CommandParameter
使用 DataContext 从 LINQ 查询中填充 DataTable 的最快方法
如何将 ref 作为道具传递:[Vue 警告]:无效的道具:道具“containerRef”的类型检查失败。预期对象,得到 HTMLDivElement?