我一直在使用Dapper-Contrib,并且在使用.Get检索对象时遇到问题,以便我可以维护对象的更改跟踪。
我的界面:
Imports Dapper.Contrib.Extensions
Public Interface ICountry
<Key>
Property CountryGUID As Guid
Property Country As String
End Interface
班级:
Imports Dapper.Contrib.Extensions
<Table("Country")>
Public Class Country
Implements ICountry
<Key>
Public Property CountryGUID As Guid Implements ICountry.CountryGUID
Public Property Country As String Implements ICountry.Country
End Class
我的功能:
Public Function Find(countryId As Guid) As ICountry
Dim country As ICountry
Using conn = New SqlConnection(ConnectionString)
conn.Open()
country = conn.Get(Of ICountry)(countryId)
conn.Close()
End Using
Return country
End Function
在调用上述功能时,我收到错误消息无效的对象名称&#39;国家&#39; 。
问题似乎是由Dapper引起的,sqlmapperextensions会自动将“s”添加到tablename,这可以通过定义TableAttribute来解决。但是,TableAttribute仅支持类,但不支持接口。
请注意,我必须使用界面拨打.Get
以获得跟踪功能。
答案 0 :(得分:0)
我遇到了完全相同的问题,并设法绕过它。
查看测试套件Dapper Contrib,我找到了this code。所以我创建了一个修改表映射的函数
private static void ConfigureTableMapper()
{
if (SqlMapperExtensions.TableNameMapper != null)
return;
SqlMapperExtensions.TableNameMapper = (type) =>
{
var tableattr = type.GetCustomAttributes(false).SingleOrDefault(attr => attr.GetType().Name == "TableAttribute") as dynamic;
if (tableattr != null)
return tableattr.Name;
var name = type.Name;
if (type.IsInterface && name.StartsWith("I"))
name = name.Substring(1);
return name;
};
}
这是C#代码,但应该很容易转换为VB。
希望这有帮助!