1

我对具有不同模式中其他表的外键的表有问题。

例如,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.. ,它会正确创建表。

我试图寻找解决方案,但找不到任何东西。知道我做错了什么,还是这是一个错误?

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 回答