【问题标题】:EF 5 Code First Mapping IssueEF 5 代码优先映射问题
【发布时间】:2015-06-01 15:32:36
【问题描述】:

有谁知道是否有一个技巧来获取 EF,代码优先,以映射两个具有相同名称但不同架构的表?

这是我得到的错误:

The type 'DAL.dbo.Employer' was not mapped. Check that the type has not been
explicitly excluded by using the Ignore method or NotMappedAttribute data
annotation. Verify that the type was defined as a class, is not primitive,
nested or generic, and does not inherit from EntityObject.

在停机期间,我正在使用 EF 为我们现有的数据库组合一个新的 POC DAL,而不是我们现在拥有的旧式废话。一切都很顺利,直到我添加了一个与另一个表同名但架构不同的表。

这里是原表,参考其他表:

namespace DAL.dbo
{
   public partial class Employer
   {
     public Employer()
     {
       Employers = new List<Brokers.Employer>();
     }
     //table definition
     public virtual ICollection<Brokers.Employer> Employers { get; set;}
   }
}

这是新表,它对 dbo 表有一个 FK。:

namespace DAL.Brokers
{
  public partial class Employer
  {
    public Guid EmployerID { get; set;}
    //table definition
    public virtual dbo.Employer dboEmployer{ get; set;}
  }
}

对于那些可能需要它的人,这里是我的 OnModelCreating 方法的相关部分:

modelBuilder.Entity<Brokers.Employer>().HasKey(k => k.ID);
modelBuilder.Entity<Brokers.Employer>().ToTable("Employers", "Brokers");

modelBuilder.Entity<dbo.Employer>().HasKey(k => k.ID);
modelBuilder.Entity<dbo.Employer>().ToTable("Employers", "dbo");
modelBuilder.Entity<dbo.Employer>().HasMany(m => m.Employers).WithRequired(r => r.dboEmployer).HasForeignKey(f => f.EmployerID).WillCascadeOnDelete(false);

我会跳过所有细节,下面是 DbContext 类的相关部分:

public class DALContext: DbContext
{
  public DALContext(string connection) : base(connection) {}

  public DbSet<Brokers.Employer> brokerEmployers { get; set;}

  public DbSet<dbo.Employer> dboEmployers { get; set;}

  protected override void OnModelCreating(DbModelBuilder modelBuilder)
  {
    //see excerpt from above
  }
}

【问题讨论】:

  • 我对此没有答案,但我有一个建议;查看 EF 电动工具。它将使用所有 FK 关联为您的数据库生成 Code First 模型和配置。我不直接使用生成的代码,因为我不想要它生成的所有关联,但是当我无法弄清楚如何映射某些东西以使用 EFPT 生成代码时,我发现它很有帮助虚拟项目并查看它是如何进行映射的。
  • 请向我们提供您的DbContext 课程。

标签: c# entity-framework poco


【解决方案1】:

即使模型类位于不同的命名空间中,您也需要使用唯一的类名。这里有解释:

EF Code first, how to register same table name with different schema?

【讨论】:

  • 这真是搞砸了。好吧,为不可能的事哭泣是没有用的;感谢您的洞察力。 @Gerald -- 感谢您让我了解 EFPT,昨天使用它并被敬畏。
猜你喜欢
  • 2014-08-31
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-12
  • 1970-01-01
相关资源
最近更新 更多