我正在爲數據庫生成LINQ-to-SQL DataContext和實體類。該數據庫有幾個表格,其中兩個是 - [AccountMaster]和[AccountCodes]。在它們之間定義了一個外鍵關係,[AccountMaster] .AccountNumber是從[AccountCodes]引用的。未生成SQLMetal DataContext關聯
在VS2008中添加一個LINQ-to-SQL文件,並將這些表拖到DBML設計視圖中,可以在AccountMaster類中適當地生成一個AccountNotes集合。同時,使用SQLMetal生成DataContext不會生成任何EntitySet集合。
設計師輸出:
[Table(Name="dbo.A01_AccountMaster")]
public partial class A01_AccountMaster //...
{
//...
private long _AccountNumber;
private EntitySet<A01aAccountNote> _A01aAccountNotes;
//...
}
SQLMetal輸出:
[Table(Name="dbo.A01_AccountMaster")]
[DataContract()]
public partial class A01_AccountMaster //...
{
//...
private long _AccountNumber;
//...
}
我下面的
http://weblogs.asp.net/scottgu/archive/2007/07/11/linq-to-sql-part-4-updating-our-database.aspx
我試圖首先使用SQLMetal的DBML文件中的指導,然後從中生成DataContext.cs文件導致DBML:
sqlmetal.exe /server:srv /database:db /user:usr /password:pwd /sprocs /namespace:AccountContext /context:AccountContext /dbml:AccountContext.dbml /language:csharp /serialization:unidirectional
sqlmetal.exe /sprocs /namespace:AccountContext /context:AccountContext /code:AccountContext.cs /language:csharp /serialization:unidirectional AccountContext.dbml
這不會生成關聯。事實上,從SQLMetal檢查DBML文件與設計師的觀點:
設計視圖DBML:
<Type Name="A01_AccountMaster">
<!-- ... -->
<Column Name="AccountNumber" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="false" />
<Association Name="A01_AccountMaster_A01aAccountNote" Member="A01aAccountNotes" ThisKey="AccountNumber" OtherKey="AccountNumber" Type="A01aAccountNote" />
<!-- ... -->
</Type>
SQLMetal DBML:
<Type Name="A01_AccountMaster">
<!-- ... -->
<Column Name="AccountNumber" Type="System.Int64" DbType="BigInt NOT NULL" CanBeNull="false" />
<!-- ... -->
</Type>
所以該協會在DBML一步已經失蹤。
由於數據庫包含大量表/ sprocs,因此使用設計器重新生成DataContext類是不現實的。我如何使SQLMetal正確地生成關聯?
編輯:
整個數據庫上運行SQLMetal,我意識到被正確產生了一些實體關聯。在AccountNotes外鍵被定義爲:
ALTER TABLE [dbo].[A01aAccountNotes] WITH CHECK ADD CONSTRAINT [FK_A01aAccountNotes_A01_AccountMaster] FOREIGN KEY([AccountNumber])
REFERENCES [dbo].[A01_AccountMaster] ([AccountNumber])
GO
ALTER TABLE [dbo].[A01aAccountNotes] CHECK CONSTRAINT [FK_A01aAccountNotes_A01_AccountMaster]
GO
EDIT2:
我注意到,正確創建的關聯是那些有ON DELETE CASCADE /更新的規則。那麼在數據庫級別生成沒有嚴格定義此規則的關聯是否是無意義的?
我的SQL金屬現在也開心:) – dioslaska 2011-11-01 09:01:28
我有類似的問題。 FK被綁定到純粹的唯一索引,並且沒有生成關聯。我不得不放棄唯一索引並添加唯一約束。現在它可以工作。謝謝你指出方向。 – 2017-02-06 03:38:44