3

我有这样的 M:N 关系模型:

[Table("Messages", Schema = "public")]
public class Message
{

    public int Id  { get; set; }
    public virtual IList<Phone> Phones{ get; set; }

}

[Table("Phones", Schema = "public")]
public class Phone
{

    public int Id  { get; set; }
    public virtual IList<Message> Messages{ get; set; }

}

所以EF为我生成了中间表......但是表的默认模式不是公共的(这是我需要的),但仍然是dbo。并给我错误:模式“dbo”不存在

如何在不创建 MessagePhone 模型类的情况下更改 MessagePhone 表的表模式?

4

2 回答 2

2

我认为这是可行的。您必须覆盖 DbContext 类的 OnModelCreating 并使用 fluent API 进行配置:

 protected override void OnModelCreating(DbModelBuilder modelBuilder)
 {
     modelBuilder.Entity<Message>().HasMany<Phone>(m => m.Phones).WithMany(p => p.Messages).Map
           (
            x =>
               {
                  x.ToTable("MessagePhone", "public");
               }
           );
 }

您将不得不对此进行测试,不确定我是否掌握了所有语法。这里没有 VS 可以尝试。

于 2013-05-14T23:12:59.670 回答
0

你试过这样吗?

基本上,您自己创建中间表,并与它有多对一的关系。这样,您可以指定任何您喜欢的内容。当然,缺点是你不能像集合一样处理关系。

于 2013-05-14T23:13:00.130 回答