1

別のスキーマ内の他のテーブルへの外部キーを持つテーブルに問題があります。

たとえば、SchemaA の TableA には、SchemaB の TableB への外部キーがあります。CTP4 がデータベースを作成するとき、TA から TB への外部キーを作成する代わりに、TableA_ID と TableB_ID 列を持つ 3 番目のテーブル "TableA_TableB" を作成します。

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.. を削除すると、テーブルが正しく作成されます。

解決策を探してみましたが、何も見つかりませんでした。私が間違っていること、またはこれはバグですか?

4

2 に答える 2

2

これは CTP4 のバグであることが判明しました。投稿したコードは期待どおりに動作するはずです。当面の回避策は、TableA の列を明示的にマップすることです。

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

〜ローワン

于 2010-08-05T20:44:14.870 に答える
0

次のことを試してみてください:

builder.Entity<TableA>().HasKey(t => t.ID);
builder.Entity<TableA>().HasRequired(tA => tA.TableB);
builder.Entity<TableB>().HasKey(t => t.ID);
于 2010-07-30T11:48:19.203 に答える