C# 向静态类传递引用的实体框架

C# 向静态类传递引用的实体框架,c#,entity-framework-4,C#,Entity Framework 4,每个人都知道这一点 using (var db = new DatabaseEntites()) { var row = db.SomeTable.SingleOrDefault(r => r.Id == 5) } 我计划用这样的静态方法创建一个静态类 public static class SomeTableRepository { public static class GetSomeTableRow(DatabaseEntities db, int id) {

每个人都知道这一点

using (var db = new DatabaseEntites())
{
    var row = db.SomeTable.SingleOrDefault(r => r.Id == 5)
}
我计划用这样的静态方法创建一个静态类

public static class SomeTableRepository
{
   public static class GetSomeTableRow(DatabaseEntities db, int id)
   {
        return db.SomeTable.SingleOrDefault(r => r.Id == 5);
   }
}
using (var db = new DatabaseEntites())
{
    var row = SomeTableRepository.GetSomeTableRow(db, id);
}
第一个代码看起来像这样

public static class SomeTableRepository
{
   public static class GetSomeTableRow(DatabaseEntities db, int id)
   {
        return db.SomeTable.SingleOrDefault(r => r.Id == 5);
   }
}
using (var db = new DatabaseEntites())
{
    var row = SomeTableRepository.GetSomeTableRow(db, id);
}

如果这是一个web应用程序……这种编程可以吗……或者这种编程会引起一些麻烦吗?……或者这是一个非常好的代码:

该代码在技术上是可以接受的,但为什么要这样做?它创建了一个间接过程,但没有使代码实质上更加简洁。因此,您使大多数人难以理解您的代码。好处是代码缩短了两个字符。对我来说,这似乎不是一场胜利


我自己会使用标准LINQ运算符,除非我真的在添加一些真正的值。

正如Kirk所说,我认为唯一的好处是可读性很小。但是,如果在第一个参数前面添加此参数并将其设置为,则可能会为代码的潜在读者获得一些可读性:

更新

我还注意到公共静态类GetSomeTableRow不会编译。我把它改成了更通用的,对将来的读者来说也更容易混淆的类名

此外,您可以将其重命名,使其看起来更像实际情况:

database.GetOneRowFromSomeTableById(id);
是的,它很长,但是抽象SingleOrDefault这样一个简单的方法的唯一原因是使代码更易于阅读。ById部分是有争议的,因为参数名为id,这使得它看起来是多余的,但是这只在使用intellisense编码时出现。您可以省略它,或者将它简化为没有Id的状态……但这对每个实现者来说都太多了

database.GetOneRowFromSomeTable(id);

我并不认为这有什么问题,但是创建静态类有什么意义呢?这似乎对你没有任何帮助。而且。。。这不是真正的存储库是的,我知道它不是存储库…可能是查询存储库:…我计划在这样一个类中有一些更复杂的查询,所以如果我需要的话,我可以经常使用它们…正如我所说的…可能对于更复杂的查询,您在项目的不同区域多次需要它们…那么您的示例应该是一个更简单的例子复杂查询。@TheMentor我更新了我的答案顺便说一句,公共静态类GetSomeTableRow将不起作用…我假设你把类仅仅指类名?是的…我犯了一个错误…我直接键入代码…当然返回语句返回类。。。