我正在使用物體框架反向 POCO 生成器 v2.37.5。
我需要映射一個外部資料庫。我無法修改架構。但是表沒有主鍵,所有列都設定為空。
但是,某些列的組合將始終是唯一的。例如,可以將以下 3 列組合起來形成主鍵:
- 注冊號
- 麻木
- 序列值

模板中是否有任何設定可以幫助我將列組合設定為主鍵?
任何建議/方向將不勝感激。
uj5u.com熱心網友回復:
首先,找到您的
Entities.ttinclude檔案。- Protip /完全可選的支線任務和分心,以獲得更好的 T4 編輯:
- 提取所有 C# 代碼(在 T4
<# #>塊內)并將其移動到名為Entities.ttinclude.cs - 添加
<#@ Include File = "Entities.ttinclude.cs" #>到Entities.ttinclude檔案中。 - 更改專案集結行動
Entities.ttinclude.cs來None。 - 現在,您可以獲得 C# 代碼的(基本)語法著色。
- 現在回到您定期安排的計算器溢位:
- 提取所有 C# 代碼(在 T4
- Protip /完全可選的支線任務和分心,以獲得更好的 T4 編輯:
在第 250-320 行附近尋找這個:
Settings.UpdateColumn = (Column column, Table table) =>在函式內部,您可以告訴 EF在這張表上完全定義了一個 PK,我發誓!像這樣:
Settings.UpdateColumn = (Column column, Table table) => { // ... if( column.ParentTable.Name == "Memb" ) { switch( column.Name ) { case "EnrollNumb": case "CubNumb": case "SeqVal": column.IsNullable = false; // PK columns cannot be NULLable. column.IsPrimaryKey = true; column.PrimaryKeyOrdinal = column.Ordinal; column.ParentTable.HasPrimaryKey = true break; } } // ... }跑
Model.tt假設沒有發生錯誤,請查看包含生成
.cs檔案的檔案夾,查找Memb.Configuration.cs. 它應該是這樣的:[System.CodeDom.Compiler.GeneratedCode("EF.Reverse.POCO.Generator", "2.37.1.0")] internal class MembConfiguration : System.Data.Entity.ModelConfiguration.EntityTypeConfiguration<Memb> { public MembConfiguration( String schema ) { ToTable( "Memb", schema ); HasKey( x => new { x.EnrollNumb, x.CubNumb, x.SeqVal } ); Property( x => x.EnrollNumb ).HasColumnName( "EnrollNumb" ).HasColumnType( "nvarchar" ).IsRequired().MaxLength(10); Property( x => x.CubNumb ).HasColumnName( "CubNumb" ).HasColumnType( "nvarchar" ).IsRequired().MaxLength(50); Property( x => x.SeqVal ).HasColumnName( "SeqVal" ).HasColumnType( "nvarchar" ).IsRequired().MaxLength(5); // other columns here } }你應該能夠構建你的專案,然后運行它,它應該可以正常作業。
您還可以定義假外鍵約束并設定其他型別的關系,EF 會相信您,這在您希望 EF 將 aVIEW當作a 來處理時非常方便TABLE,尤其是因為VIEWSQL Server 中的 a 不能充滿 PK和 FK 約束(你也可以讓 DML 作業,前提VIEW是你是可更新的)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/381537.html
