EF DB第一次刷新未检测到特定表的FK

时间:2015-05-31 08:10:43

标签: c# entity-framework-5 ef-database-first

不确定我的设置发生了什么,但是最近,当我使用新字段或具有特定表(import numpy as np import matplotlib.pyplot as plt def geometric_means(a): """Return pairwise geometric means of adjacent elements.""" return np.sqrt(a[1:] * a[:-1]) a = [0.05, 0.1, 0.2, 1, 2, 3] * 2 b = [0.05, 0.1, 0.2, 1, 2, 3] * 3 # Find frequencies bins = np.array([0, 0.1, 1, 10]) a_hist = np.histogram(a, bins=bins)[0] b_hist = np.histogram(b, bins=bins)[0] # Find log-scale mid-points for bar-edges mid_vals = np.hstack((np.array([0.05,]), geometric_means(bins[1:]))) # Compute bar left-edges, and bar widths a_x = np.empty(mid_vals.size * 2) a_x = bins[:-1] a_widths = mid_vals - bins[:-1] b_x = np.empty(mid_vals.size * 2) b_x = mid_vals b_widths = bins[1:] - mid_vals plt.bar(a_x, a_hist, width=a_widths, color='b') plt.bar(b_x, b_hist, width=b_widths, color='g') plt.gca().set_xscale("symlog", linthreshx=0.1) plt.show() 的外键的新表)更新数据库时,我的数据库刷新会选择新的字段,但不识别与Person的FK关系。大多数其他表的外键工作正常。

可能缺少什么设置?

也许一条线索:Person充当其他几个表的基本类型,例如PersonManager等都具有名称,出生日期,性别等的基本特征,而后代表的主键也可作为Customer的外键。 。与子代表的FK关系也无法识别。

2 个答案:

答案 0 :(得分:3)

在映射复杂的继承模型时,实体框架可能相当有限。但是,在映射继承时,您基本上有三个选项:

TPH (每个层次结构的表)映射:此映射为层次结构中的所有字段生成单个表,并且将附加冲突或“同名”字段由一个数字种子。例如Name1(Person),Name2(Manager)等。

TPT (每个类型的表)mappping :此映射为每个对象生成单独的表,但是冲突的属性名称仅映射在基类中。在你的实例中,Person类。注意:由于复杂的连接查询以及在某些情况下您遇到的异常,不建议使用TPT

TPC (每个具体的表格式)映射:与TPT类似,除了类的所有属性(包括继承的属性),映射到列的列对应表

解决方案:

假设您正在使用TPT,这意味着您的继承类成员未被映射。我建议您查看TPC以生成映射和迁移。您需要查看EF中的Fluent API以实现上述映射:

TPC示例:

在DbCOntext对象中声明:

 protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Person>() 
        .Property(c => c.CourseID) 
        .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); 

        modelBuilder.Entity<Manager>().Map(m => 
        { 
            m.MapInheritedProperties(); 
            m.ToTable("Manager"); 
        }); 

        modelBuilder.Entity<Customer>().Map(m => 
        { 
           m.MapInheritedProperties(); 
           m.ToTable("Customer"); 
        });
    }

免责声明:如果没有看到继承结构或执行迁移,很难确切地知道您的问题是什么,但我发现上面提到了EF关系中最常见的问题。

答案 1 :(得分:3)

我相信自己偶然发现了答案。 除主键外,该表还在ID字段上有索引。出于某种原因,所有其他具有我的表外键的表都指的是索引而不是PK ......这显然混淆了EF的地狱。 我删除了所有的FK,删除了索引,重新创建了FK并重新创建了索引......瞧!这些关联现在都出现在EDMX中了!