1

我们计划从 EF4.2 升级到 6,但在 4.2 中工作的功能遇到问题。

SELECT emp_no_alpha as EmployeeNumber, code_user_1 as Code1, emp_name as EmployeeName FROM OPENQUERY(EMS02, 'select emp_no_alpha, code_user_1, emp_name from dce_mms where emp_no_alpha =''   100393'' ')

我们将上述语句与 dbContext.Database.SqlQuery($sql-stmt) 结合使用来检索实体。这适用于 4.2 中的此模型:

public abstract class Model_XX_EMS_DCEMMS
    {
        //LEN=9, RIGHT PAD
        [Column("EMP_NO_ALPHA", Order = 0), Key(), DatabaseGenerated(DatabaseGeneratedOption.None)]
        public string EmployeeNumber { get; set; }

        //LEN=5, RIGHT PAD
        [Column("CODE_USER_1")]
        public string Code1 { get; set; }

        [Column("EMP_NAME")]
        public string EmployeeName { get; set; }
    }

但是在 6.0 中,SQL 分析器尝试在默认目录中实际创建一个 Model_XX_EMS_DCEMMS 表,并且从不执​​行 select 语句,因此返回 null。

这就是 6.0 中发生的情况:

SELECT Count(*)
FROM INFORMATION_SCHEMA.TABLES AS t
WHERE t.TABLE_TYPE = 'BASE TABLE'
    AND (t.TABLE_SCHEMA + '.' + t.TABLE_NAME IN ('dbo.Model_XX_EMS_DCEMMS')
        OR t.TABLE_NAME = 'EdmMetadata')
CREATE TABLE [dbo].[Model_XX_EMS_DCEMMS] (
    [EMP_NO_ALPHA] [nvarchar](128) NOT NULL,
    [CODE_USER_1] [nvarchar](max),
    [EMP_NAME] [nvarchar](max),
    [Discriminator] [nvarchar](128) NOT NULL,
    CONSTRAINT [PK_dbo.Model_XX_EMS_DCEMMS] PRIMARY KEY ([EMP_NO_ALPHA])
)

是否有新的 DbContext 配置或我缺少的某些属性?

4

1 回答 1

1

Entity Framework 正在创建一个带有鉴别器列的表以支持Table Per Hierarchy 继承

但是使用 OPENQUERY 你不需要那个表。要停止 EF 为抽象类创建类似的表,您将需要每个类型的表或每个具体类型的表

我对 OPENQUERY了解不多。您能否创建一个视图,EF 可以使用它来支持 TPT 中的抽象类?然后将表属性添加到继承该类的表中。

至于它以前为什么有效,TPC 页面上的这句话让我觉得 EF 发生了变化,或者您丢失了一些手动 XML 重写。

VS2010 中的实体数据模型设计器不支持 TPC(即使 EF 运行时支持)。这基本上意味着,如果您遵循 EF 的 Database-First 或 Model-First 方法,那么配置 TPC 需要在 EDMX 文件中手动编写 XML,这不被认为是一种有趣的做法。好吧,没有了。

于 2013-11-13T03:04:56.963 回答