2012-11-29 30 views
0

我有这样的代码,如何设置“CommnadTimeout”?如何使用方法“CreateSqlStringAccessor”时设置“超时”?

var database = EnterpriseLibraryContainer.Current.GetInstance<Database>(); 
var sqlGetAllPersons = @"select * from Person.Person"; 
var personMapper = MapBuilder<Person>.MapAllProperties().Build(); 

// create an accessor (DataAccessor) 
var personAccessor = database.CreateSqlStringAccessor<Person>(sqlGetAllPersons, personMapper); 

// execute the accessor (IEnumerable<Person>) 
var profiles = personAccessor.Execute(); 

(从EntLib 5.0 DAAB MapBuilder maps DBNull to null代码)

感谢

回答

1

虽然我很喜欢小本的解决方案,我能解决这个问题是这样的:

public class ParameterMapperWithCommandTimeout : IParameterMapper 
{ 
    public int CommandTimeout { get; set; } 

    public void AssignParameters(DbCommand command, object[] parameterValues) 
    { 
     command.CommandTimeout = this.CommandTimeout; 
    } 
} 

应用到前面的例子:

var database = EnterpriseLibraryContainer.Current.GetInstance<Database>(); 
var sqlGetAllPersons = @"select * from Person.Person"; 
var personMapper = MapBuilder<Person>.MapAllProperties().Build(); 
var parameterMapper = new ParameterMapperWithCommandTimeout { CommandTimeout = MyTimeOut }; 

// create an accessor (DataAccessor) 
var personAccessor = database.CreateSqlStringAccessor<Person>(sqlGetAllPersons, parameterMapper, personMapper); 

// execute the accessor (IEnumerable<Person>) 
var profiles = personAccessor.Execute(); 
+1

这是关于你将得到的最好的。访问者故意不够全功能,并且不允许进行大量的定制。你插入的点几乎是DbCommand公开的唯一地方。 –