2012-11-29 31 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公開的唯一地方。 –