2010-07-29 24 views
1

我有一個表的外鍵與其他架構中的其他表的問題。實體框架CTP4 - 跨模式的外鍵映射無法正常工作。錯誤?

例如,SchemaA中的TableA對SchemaB中的TableB具有外鍵。當CTP4創建數據庫時,它不會創建從TA到TB的外鍵,而是會創建第三個表「TableA_TableB」,其中包含TableA_ID和TableB_ID列,就好像它認爲它應該是多對多關係一樣。

public class TableA 
{ 
    public int ID { get; set; } 
    public TableB TableB { get; set; } 
} 

public class TableB 
{ 
    public int ID { get; set; } 
} 

var builder = new ModelBuilder(); 

// this works fine - creates only two tables with the correct foreign key 
// builder.Entity<TableA>(); 
// builder.Entity<TableB>(); 

// this doesn't work - creates a third many-to-many table 
builder.Entity<TableA>().MapSingleType() 
    .ToTable(new StoreTableName("TableA", "SchemaA")); 
builder.Entity<TableB>().MapSingleType() 
    .ToTable(new StoreTableName("TableB", "SchemaB")); 

var model = builder.CreateModel(); 

var store = new DbContext("database", model); 
store.Database.DeleteIfExists(); 
store.Database.Create(); 

如果我從上面的代碼中刪除.ToTable ..它會正確創建表。

我試着尋找一個解決方案,但找不到任何東西。任何想法我做錯了,或者這是一個錯誤?

回答

2

這竟然是在CTP4中的錯誤,你已經張貼你的預期應該工作的代碼。暫時的解決方法是列在表A明確映射:

builder.Entity<TableA>().MapSingleType(a => new { a.ID, tableBID = a.TableB.ID }) 
    .ToTable(new StoreTableName("TableA", "SchemaA")); 

〜羅文

+0

這個伎倆! – mjezzi 2010-09-07 12:44:56

0

你可以嘗試以下方法:

builder.Entity<TableA>().HasKey(t => t.ID); 
builder.Entity<TableA>().HasRequired(tA => tA.TableB); 
builder.Entity<TableB>().HasKey(t => t.ID); 
+0

的,如你的榜樣工作映射發現當我不使用不同的模式。一旦我爲每個表添加不同的模式,那就是什麼時候不起作用。 – mjezzi 2010-07-30 14:27:51

+0

@mjezzi - 嗯...嘗試在官方MSDN論壇上發佈帖子。 – TheCloudlessSky 2010-07-30 14:45:35

+0

@TheClouslessSky這是一個好主意。 – mjezzi 2010-07-30 14:50:58