实体框架传递对静态类的引用

时间:2012-05-03 14:23:17

标签: 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)
   {
        return db.SomeTable.SingleOrDefault(r => r.Id == 5);
   }
}

然后第一个代码就像这样

using (var db = new DatabaseEntites())
{
    var row = SomeTableRepository.GetSomeTableRow(db, id);
}

如果这是一个网络应用程序...那种编程是否可以......或者那种编程会造成一些麻烦?...或者这是非常好的代码:)

2 个答案:

答案 0 :(得分:5)

代码在技术上是可以接受的,但为什么要这样做呢?它创造了一种间接性,而不会使代码更加简洁。因此,您的代码难以让大多数人理解。好处是你的代码缩短了两个字符。这似乎不是我的胜利。

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

答案 1 :(得分:3)

正如柯克所说,我认为唯一的好处是可读性很小。但是,如果您在第一个参数前添加this并将其设为extension method,那么您可能会为潜在的代码读者获得一些可读性:

<强>更新

我也注意到public static class GetSomeTableRow无法编译。我将其更改为更通用,更不会让未来的读者感到困惑(classYourClassName

public static class SomeTableRepository
{
   public static YourClassName GetSomeTableRow(this DatabaseEntities db, int id)
   {
        return db.SomeTable.SingleOrDefault(r => r.Id == 5);
   }
}

...

database.GetSomeTableRow(id);

此外,您可以将其重命名为使其更像实际内容:

database.GetOneRowFromSomeTableById(id);

是的,它很冗长,但抽象像SingleOrDefault这样简单方法的唯一理由就是让代码一目了然。 ById部分是有争议的,因为参数名为id(它使它看起来多余),但是只有在使用intellisense进行编码时才出现。您可以将其删除(或者将其归结为By而不使用Id ...但这对于每个实施者IMO而言都会留下太多差距。

database.GetOneRowFromSomeTable(id);
相关问题