我所有的数据对象都实现了一个 IFillable 接口(interface)
Public Interface IFillable
Sub Fill(ByVal Datareader As Data.IDataReader)
End Interface
在对象本身中,您通常会看到类似的东西
Public Class Supplier
Implements IFillable
Public Sub New()
End Sub
Public Sub New(ByVal SupplierID As Guid, ByVal CompanyID As Guid, ByVal Description As String)
Me._SupplierID = SupplierID
Me._CompanyID = CompanyID
Me._Description = Description
End Sub
Public Property SupplierID As Guid
Public Property CompanyID As Guid
Public Property Description As String
Public Sub Fill(ByVal Datareader As System.Data.IDataReader) Implements IFillable.Fill
If Not Datareader.IsClosed Then
Me._SupplierID = Datareader.GetGuid(Datareader.GetOrdinal("SupplierID"))
Me._CompanyID = Datareader.GetGuid(Datareader.GetOrdinal("CompanyID"))
Me._Description = Datareader.GetString(Datareader.GetOrdinal("Description"))
End If
End Sub
End Class
现在这是棘手的一点。鉴于我所有的属性名称WILL ALWAYS 匹配我的数据库列名我想做的是使用反射在编译时生成填充方法并推断类型和列名数据读取器。
我假设我需要将此功能构建为某种工具/vs 插件?我正在寻找的是有关解决此问题的最佳方法的指导。
PS:顺便说一句:显然我可以在运行时使用反射轻松地做到这一点,但我不想为此而受到性能影响(尽管理论上如果我能以某种方式缓存值(静态类?)它可能不会太糟糕) .
最佳答案
为什么不在“构建前”步骤中使用简单的生成器来创建代码。
我们已经创建了自己的代码生成器,当数据库定义更改后手动触发时,它会生成代码内数据层。
关于c# - .Net 编译器 Hook ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4732500/