【问题标题】:Entity Framework 6 Code First From Database context performs CREATE TABLE on existing an VIEWEntity Framework 6 Code First From Database 上下文在现有视图上执行 CREATE TABLE
【发布时间】:2014-11-21 14:36:41
【问题描述】:

我们有一个由我们的 ERP 合作伙伴维护的生产 Oracle 数据库服务器。

对于一些自定义开发,我需要使用 Entity Framework 6 连接到这个 Oracle 数据库。我有一个用户可以选择 ERP 架构上的任何表,并且我在我的 EF 上下文中使用的架构/用户中创建视图。

视图本身非常简单,只有一些连接,但所有的表都在另一个模式中引用。

即:

CREATE TABLE ERP.M_GROUP 
(
  FILE VARCHAR2(3 BYTE) 
, MATFAM VARCHAR2(1 BYTE) NOT NULL 
, GROUP VARCHAR2(20 BYTE) NOT NULL 
, OMS1 VARCHAR2(60 BYTE) 
, OMS2 VARCHAR2(60 BYTE) 
, RESTW_FACTOR1_I NUMBER 
) 


CREATE VIEW EF6CTX.GROUPS AS
SELECT
    GROUP Id,
    MAX(OMS1) Name
FROM 
    M_GROUP
WHERE 
    FILE = 'BAT'
    AND MATFAM IN ('B','C','I', 'K')
GROUP BY GROEP

当我使用 Visual Studio 的 Entity Framework 6 Code First 从数据库连接到我的数据库时,识别为用户 EF6CTX,我可以选择此视图并按应有的方式创建我的模型。

但是当我尝试阅读这些组时..

var ctx = new TestContext();
ctx.Database.Log = Console.WriteLine;
foreach (var group in ctx.GROUPS)
{
    Console.WriteLine("Group: {0}", group.NAME);
}

我得到这个结果:

Opened connection at 21/11/2014 15:29:05 +01:00

Started transaction at 21/11/2014 15:29:05 +01:00

create table "EF6CTX"."GROUPS"
(
    "ID" varchar2(20 CHAR) not null,
    "NAME" varchar2(60 CHAR) null,
    constraint "PK_GROUPS" primary key ("ID")
)


-- Executing at 21/11/2014 15:29:05 +01:00

-- Failed in 217 ms with error: ORA-01031: insufficient privileges

用户 EF6CTX 没有创建表的权限.. 当然。但是它为什么要创建一个表呢?它应该使用现有的视图!

【问题讨论】:

    标签: database oracle entity-framework entity-framework-6


    【解决方案1】:

    在禁用迁移时修复:

    System.Data.Entity.Database.SetInitializer<TestContext>(null);
    

    【讨论】:

      猜你喜欢
      • 2014-02-19
      • 2015-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-02
      相关资源
      最近更新 更多