修改实体框架生成的中间表的表模式

本文关键字:中间 模式 实体 框架 修改 | 更新日期: 2023-09-27 18:13:50

我得到了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表的表模式?

修改实体框架生成的中间表的表模式

我认为这是可行的。你必须重写DbContext类的OnModelCreating,并配置流畅的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在这里尝试

你试过这样吗?

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