我有各种各样的性别,地址类型,接触式等控制值查找数据的参考表许多表有多个外键参照下表
我也有很多到许多有两个外键同一个表关联表。 不幸的是,当这些表被拉到一个LINQ模型,并生成DBML,SQLMetal不看外键列,或限制的名字的名字,但只有在目标表中。 所以我结束了委员呼吁定1,给定2,...不是很维护方便。 例:
<Association Name="tb_reference_tb_account" Member="tb_reference" <======
ThisKey="shipping_preference_type_id" OtherKey="id" Type="tb_reference"
IsForeignKey="true" />
<Association Name="tb_reference_tb_account1" Member="tb_reference1" <======
ThisKey="status_type_id" OtherKey="id" Type="tb_reference"
IsForeignKey="true" />
我可以进入DBML和手动更改成员名称,当然,不过这将意味着我不能再来回我的数据库架构。 这是不是在模型中,这仍然是不断发展的当前阶段的选项。 分割的参照表为n个单独的表也是不希望的。
我大概可以写每一代后对XML运行,并用从ThisKey派生出来的成员名称的脚本(因为我坚持命名约定这些类型的密钥)。 有没有人找到了一个更好的解决这个问题?
于是,我走下部分类路线。 举例来说,我添加了以下成员来解决第一基准构件在我原来的例子:
public partial class tb_account
{
public tb_reference shipping_preference_reference
{
get
{
return this._tb_reference.Entity;
}
set
{
this.tb_reference = value;
}
}
这是远远不够完善。 它需要额外的代码在较大的模型大量,并且依赖属性的顺序不会改变(如果另一个外键引用表添加到该帐户表上,该成员可能实际上指向比别的东西航运偏好)。 有积极的一面,太。 既然我已经写作其他用途部分类,添加这些成员并没有要求我重新构建应用程序。
在VS2010实际上,你可以重命名视图中的父母和孩子的属性。 这是一个有点隐蔽,但。
- 在dbml的观众选择你烦恼的关系。
- 在属性网格,你将有两排子和父属性。
- 展开他们那里你可以改变属性的名称
更多详细信息可以在这里找到: http://weblogs.asp.net/scottgu/archive/2007/05/29/linq-to-sql-part-2-defining-our-data-model-classes.aspx
这是我从得到它。
对LINQ当前的MS工具是一些什么样的限制,它并没有真正看起来不起眼的努力将是未来的VS 2010,您可以编写自己的代码生成器,看达明的T4模板或PLINQO 。 我还发现EDMDesigner这可能是值得一试。
从sqlmetal我的XML有更合理的默认值。 并不完美,但更好。 第一FK拿到表名,但第二次拿到了字段名。
<Association Name="FK_Product_DefaultOutputTypeID" Member="OutputType"
ThisKey="DefaultOutputTypeID" OtherKey="OutputTypeID" Type="OutputType"
IsForeignKey="true" />
<Association Name="FK_Product_DefaultTileOutputTypeID" Member="DefaultTileOutputType"
ThisKey="DefaultTileOutputTypeID" OtherKey="OutputTypeID" Type="OutputType"
IsForeignKey="true" />
sqlmetal版本:
C:\Program Files\Microsoft Visual Studio 9.0\VC>sqlmetal /?
Microsoft (R) Database Mapping Generator 2008 version 1.00.21022
for Microsoft (R) .NET Framework version 3.5
Copyright (C) Microsoft Corporation. All rights reserved.
...