我的程序有以下类定义:
public sealed class Subscriber
{
private subscription;
public Subscriber(int id)
{
using (DataContext dc = new DataContext())
{
this.subscription = dc._GetSubscription(id).SingleOrDefault();
}
}
}
,其中
_GetSubscription()
是一个 sproc ,它返回ISingleResult<_GetSubscriptionResult>
类型的值
说,我有一个类型List<int>
的列表,其中包含1000 id
个,我想创建一个类型为List<Subscriber>
的订阅者的集合。
如果不在循环中调用构造函数1000次,我怎么能这样做呢?
因为我试图避免频繁地打开/关闭DataContext,这可能会给数据库带来压力。
TIA。
答案 0 :(得分:6)
编写一个调用私有构造函数的静态工厂方法。
public sealed class Subscriber
{
// other constructors ...
// this constructor is not visible from outside.
private Subscriber(DataContext dc, int id)
{
// this line should probably be in another method for reusability.
this.subscription = dc._GetSubscription(id).SingleOrDefault();
}
public List<Subscriber> CreateSubscribers(IEnumerable<int> ids)
{
using (DataContext dc = new DataContext())
{
return ids
.Select(x => new Subscriber(dc, x))
// create a list to force execution of above constructor
// while in the using block.
.ToList();
}
}
}