2010-07-29 6 views
1

J'ai un problème avec les tables qui ont des clés étrangères à d'autres tables dans un schéma différent. Par exemple, TableA dans SchemaA a une clé étrangère à TableB dans SchemaB. Lorsque CTP4 crée la base de données, au lieu de créer une clé étrangère de TA à TB, il crée une troisième table "TableA_TableB" avec les colonnes TableA_ID et TableB_ID comme si elle pensait que ce devrait être une relation plusieurs à plusieurs.Entity Framework CTP4 - Les mappages de clés étrangères sur les schémas ne fonctionnent pas correctement. Punaise?

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(); 

Si je supprime le .ToTable .. du code ci-dessus, il crée les tables correctement.

J'ai essayé de trouver une solution mais je n'ai rien trouvé. Une idée de ce que je fais mal, ou est-ce un bug?

Répondre

2

Cela est avéré être un bogue dans CTP4, le code que vous avez posté devrait fonctionner comme prévu. La solution pour le moment est de mapper explicitement les colonnes TableA:

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

~ Rowan

+0

Cela a fait l'affaire! – mjezzi

0

Pouvez-vous essayer ce qui suit:

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

Les applications telles que votre travail par exemple trouver quand je ne pas utiliser un schéma différent. Une fois que j'ajoute les différents schémas pour chaque table, c'est quand ça ne marche pas. – mjezzi

+0

@mjezzi - Hmm ... Essayez de faire un post sur les forums MSDN officiels. – TheCloudlessSky

+0

@TheClouslessSky C'est une bonne idée. – mjezzi

Questions connexes