由于项目和连接字符串位置问题,我在SubSonic 3.0中编译数据库对象时遇到问题

时间:2010-01-14 11:51:51

标签: templates web-config subsonic subsonic3 t4

我遇到了用于生成代码的T4模板的问题。

我想知道是否有人可以帮助我解决我遇到的问题。 我想将连接字符串存储在默认位置,例如网站的根目录(Web.Config或单独的.config文件),以便与SubSonic 3.0一起使用。

如果t4模板在具有配置文件的项目中“运行”,这很好。

我想要做的是将它们从初始项目分离到单独的类/项目文件中,然后从那里运行模板。

这一切都很好,只要我在这些项目中使用连接字符串放置App.Config文件,但这不是我想要的,因为这将硬编码那些类文件中的连接字符串。 (注意其他类文件项目完全在一个单独的位置)

我可以描述设置(Web应用程序)的最佳方式如下:

  • DB类(项目) | ----模型> T4模板(注1) |
  • 核心类(项目) |
  • CMS类(项目) |
  • 网站(项目) | ---- Web.Config<<<的ConnectionString

注1: 该目录中的T4模板需要从Website(Project)根文件夹中的任何centeral文件中读取。由于数据库服务器可以改变,因此需要发生这种情况。

数据库类(项目)与网站(项目)位于不同的位置。

这已经在dashCommerce中完成,但是使用SubSonic 2.0(很可能是命令行编译器做到了,我不太确定)

只是因为有人想知道为什么我这样做。我正在编译一组基础DLL,以便在许多项目中使用。

DB类对于每个项目都是唯一的,并且将使用该DLL中的T4 teplates基于该项目的数据库进行编译。其他DLL将引用DB类DLL,这些将在项目中很常见。

基本上,DB类实际上是我编写的任何其他DLL的数据库的网关,因此DB类需要引用根项目中的连接字符串。

(我意识到我可以创建和编译要使用的数据库DLL但是在开发/测试中项目将挂在其他DLLS上,因为他们也需要引用连接字符串如果我包含对SubSonic的引用我需要从这些DLL访问表对象等除非我在DB类中创建所有桥接代码,这对于这个练习来说只是疯狂而毫无意义)

编辑:

我承认很难解释。我将基于一个更简单的例子。我有两个地点: A.- D:\ Web Application \ Core.DLL AND B.- D:\ Web Application \ Website 我在“Web应用程序”文件夹中创建了一个新的C#.net“Web应用程序”解决方案,并将上面的两个项目添加到其中。 (请注意,它是一个在不同目录中包含两个单独项目的解决方案,可以是任何位置)我需要将连接字符串数据存储在“Website”项目中,并让Core.DLL项目从那里引用它。

Core.Dll将存储生成的ttfiles和相应代码,以便与SubSonic 3.0一起使用。 tt文件将从Core.Dll项目中的Visual Studio中“运行”。这两个问题是:

  • A.- tt文件无法引用web.config文件(或者可以吗?)和
  • B.- SubSonic代码仍然需要能够在运行时读取连接字符串。我可以让App.config读取web.config connectionstring部分吗?或者我将如何做到这一点。

2 个答案:

答案 0 :(得分:0)

好的,我不确定我是100%对你所要求的,但我会尽我所能

  • A.- tt文件无法引用web.config文件(或者可以吗?)和

不,但他们真的不需要。 D:\ Web Application \ Core.DLL的App.config可以包含连接字符串。如果您担心在web.config和app.config中都重复连接字符串,那么您可以添加一个自定义构建事件,将连接字符串从一个复制到另一个。

  • B.- SubSonic代码仍然需要能够在运行时读取连接字符串。我可以让App.config读取web.config connectionstring部分吗?或者我该怎么做。

在运行时,web.config将不会引用您的网站引用app.config。

答案 1 :(得分:0)

感谢你回到我身边亚当。我刚刚发布时想出来,并认为我会让人们知道我的结果。

直到我在网上搜索关于T4模板的内容,我的脑海才开始行动起来。 我误解了T4模板的工作原理。我认为tt文件必须保留生成的代码文件。

我所做的是创建第二个项目,只是为了运行与主项目分开的T4模板。我输入了我目前使用的连接字符串,同样只用于开发,而不是生产,所以我可以轻松修改它。这非常有效,并允许我将生成的代码文件复制到DB DLL类项目中以供使用。

我不知道的是,就像你上面说的那样,当项目完全运行时,它将Web.config文件提供给与网站相关的任何DLL等。 所以这也解决了我的连接字符串的问题,并且在生产中很容易修改它。

愚蠢,但这只是其中之一,如果你不知道也没有人告诉你,你认为不能这样做。

我现在可以使用SubSonic访问项目中任何位置的数据库对象(包括引用数据库DLL类的任何DLL)。

我不得不说,SubSonic将会让我的生活更轻松。获取数据的单行代码,现在这是很好的思考:)