【发布时间】:2010-05-24 23:13:12
【问题描述】:
基本上,我遇到了与详细的here 相同的问题,但在 SubSonic 3.0 中。不幸的是,我不知道如何在 SubSonic 3.0 中更改提供程序。
这是我需要在 MySQL.ttinclude、Settings.ttinclude 或 T4 模板之一中更改的内容吗?还是它在某个地方配置?
想法?有什么建议吗?
【问题讨论】:
基本上,我遇到了与详细的here 相同的问题,但在 SubSonic 3.0 中。不幸的是,我不知道如何在 SubSonic 3.0 中更改提供程序。
这是我需要在 MySQL.ttinclude、Settings.ttinclude 或 T4 模板之一中更改的内容吗?还是它在某个地方配置?
想法?有什么建议吗?
【问题讨论】:
我发现this 说它符合设计。我无法想象为什么。我更改了 Classes.tt 文件以生成单个映射。相关代码如下。但是,这取决于我所有的 PK 都命名为 Id 的事实,但您应该能够理解。
在 IQueryable 生成部分之前:
if (fk.ThisColumn == "Id")
{
//This is where the standard IQueryable goes
} else {
//This is what I added
public <#= fk.OtherTable #> <#= fk.OtherTable #>
{
get
{
var db=new <#=Namespace #>.<#=DatabaseName#>DB();
return from items in db.<#=fk.OtherQueryable #>
where items.<#=fk.OtherColumn#> == _<#=fk.ThisColumn#>
select items;
}
}
}
希望这会有所帮助。我现在想弄清楚现在做多对多的桌子:/
【讨论】:
我使用的是 Subsonic 2.2,我遇到了同样的问题,但这解决了我的问题:除了原始提供商 MySqlDataProvider,还有一个扩展版本:MySqlInnoDBDataProvider
所以在您的 web.config 中,确保选择了提供者:
<add name="MyProvider"
type="SubSonic.MySqlInnoDBDataProvider, SubSonic"
connectionStringName="WriteConnectionString"
generatedNamespace="AttendAnywhere.Data"
generateLazyLoads="true"
extractClassNameFromSPName="true" />
【讨论】: