[ 
http://issues.apache.org/jira/browse/IBATISNET-46?page=comments#action_63968 ]
     
Ron Grabowski commented on IBATISNET-46:
----------------------------------------

I made a typo in the existing code. IBatisNet currently uses this code:

public IDbCommand GetCommand()
{
 return (IDbCommand) ((ICloneable)_templateCommand).Clone(); 
}

> IBatisNet incorrectly assumes that Command and Connection providers will 
> implement System.IConeable
> ---------------------------------------------------------------------------------------------------
>
>          Key: IBATISNET-46
>          URL: http://issues.apache.org/jira/browse/IBATISNET-46
>      Project: iBatis for .NET
>         Type: Bug
>     Versions: DataMapper 1.1
>  Environment: [assembly: AssemblyVersion("1.1.458")]
>     Reporter: Ron Grabowski
>     Assignee: Gilles Bayon

>
> Classes that implement IDbCommand, IDbConnection, etc. are not required to 
> implement the System.ICloneable interface. For example the SQLite.NET client:
>  http://sourceforge.net/projects/adodotnetsqlite
> does not. The following line in Provider.cs causes a cast exception becuase 
> it assumes the object implements ICloneable:
> public IDbCommand GetCommand()
> {
>  return (IDbCommand) Activator.CreateInstance(_templateCommand.GetType());
> }
> It should be changed to:
> public IDbCommand GetCommand()
> {
>  if (_templateCommand is ICloneable)
>  {
>   return (IDbCommand) ((ICloneable)_templateCommand).Clone();
>  }
>  else
>  {
>   return (IDbCommand) Activator.CreateInstance(_templateCommand.GetType());
>  }
> }
> If you're paranoid about speed, the check for IConeable could be done a 
> single time inside of the Initialisation() method of the same class and the 
> value could be stored as a bool:
>  bool _templateCommandIsICloneable = _templateCommand is ICloneable;
> then used later:
> public IDbCommand GetCommand()
> {
>  if (_templateCommandIsICloneable)
>  {
>   return (IDbCommand) ((ICloneable)_templateCommand).Clone();
>  }
>  else
>  {
>   return (IDbCommand) Activator.CreateInstance(_templateCommand.GetType());
>  }
> }
> GetConnection() and GetDataAdapter() should also be changed.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to