我们有一个由ERP合作伙伴维护的生产Oracle数据库服务器。
对于某些自定义开发,我需要使用实体框架 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 的实体框架 6 代码首先从数据库连接到我的数据库时,我可以选择此视图,我的模型将按预期创建。
但是当我尝试阅读这些组时..
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没有创建表的权限。但是,为什么要尝试创建表呢?它应该使用现有视图!
禁用迁移时已修复:
System.Data.Entity.Database.SetInitializer<TestContext>(null);