读书人

无法将类型“IBatisNet.DataMapper.IS

发布时间: 2012-02-12 17:16:34 作者: rapoo

无法将类型“IBatisNet.DataMapper.ISqlMapper”隐式转换为“IBatisNet.DataMapper.SqlMapper”。
用Editplus整理编辑完IBatisNet官网的例子Tutorial-1.2.1,使用IBatisNet.DataMapper-bin-1.5.1类库。编译命令如下:
-----------------------------------------------------
csc /r:../bin/IBatisNet.DataMapper.dll /r:../bin/nunit.framework.dll /r:../bin/IBatisNet.Common.dll /target:library /out:iBatisTutorial.Model.dll *.cs
-------------------------------------------------------
错误内容:
------------------------------------------------------

无法将类型“IBatisNet.DataMapper.ISqlMapper”隐式转换为“IBatisNet.DataMapper.SqlMapper”。
存在一个显式转换(是否缺少强制转换?)

---------------------
源码如下:

Helper.cs
---------------------------------------------
using IBatisNet.DataMapper;

namespace iBatisTutorial.Model
{
/// <summary>
/// Base class for Helper objects (*Helper).
/// Provides shared utility methods.
/// </summary>
public abstract class Helper
{
public SqlMapper Mapper ()
{
return IBatisNet.DataMapper.Mapper.Instance ();
}
}
}
------------------------------------
PersonHelper.cs
------------------------------------
using System.Collections;

namespace iBatisTutorial.Model
{
/// <summary>
/// Helper class for Person entities.
/// </summary>
public class PersonHelper : Helper
{
public Person Select (int id)
{
return (Person) Mapper ().QueryForObject ( "Select ", id);
}

public IList SelectAll ()
{
return Mapper ().QueryForList ( "Select ", null);
}

public int Insert (Person person)
{
Mapper ().Insert ( "Insert ", person);
// Insert is designed so that it can return the new key
// but we are not utilizing that feature here
return 1;
}

public int Update (Person person)
{
return Mapper ().Update ( "Update ", person);
}

public int Delete (int id)
{
return Mapper ().Delete ( "Delete ", id);
}

}
}
------------------------------------
Helpers.cs
------------------------------------
namespace iBatisTutorial.Model
{
/// <summary>
/// Singleton "controller " for Helper classes.
/// </summary>
public class Helpers
{
private static volatile PersonHelper _PersonHelper = null;

public static PersonHelper Person ()
{
if (_PersonHelper == null)
{
lock (typeof (PersonHelper))
{
if (_PersonHelper == null) // double-check
_PersonHelper = new PersonHelper ();
}
}
return _PersonHelper;


}
}
}
------------------------------------
Person.cs
------------------------------------
using System;

namespace iBatisTutorial.Model
{

/// <summary>
/// Business object representing a Person
/// entity in our problem domain.
/// </summary>
public class Person
{
/*
private string _Property;
public string Property
{
get { return _Property; }
set { _Property = value; }
}
*/

private int _Id;
public int Id
{
get { return _Id; }
set { _Id = value; }
}

private string _FirstName;
public string FirstName
{
get { return _FirstName; }
set { _FirstName = value; }
}

private string _LastName;
public string LastName
{
get { return _LastName; }
set { _LastName = value; }
}

private DateTime _BirthDate;
public DateTime BirthDate
{
get { return _BirthDate; }
set { _BirthDate = value; }
}

private double _WeightInKilograms;
public double WeightInKilograms
{
get { return _WeightInKilograms; }
set { _WeightInKilograms = value; }
}

private double _HeightInMeters;
public double HeightInMeters
{
get { return _HeightInMeters; }
set { _HeightInMeters = value; }
}

}
}
------------------------------------
请各位大虾帮帮忙。小弟感激不尽!
------------------------------------
------------------------------------



[解决办法]
return IBatisNet.DataMapper.Mapper.Instance ();
应该是这里的问题吧。Mapper 属性是SqlMapper类型的,你查一下 Instance ()返回的类型,应该是一个接口类型ISqlMapper,把这句改成:
return (SqlMapper)IBatisNet.DataMapper.Mapper.Instance ();

读书人网 >C#

热点推荐