【发布时间】:2015-05-03 08:47:54
【问题描述】:
我创建了两个应用程序,第一个使用 ODP.Net 和没有实体 - 效果很好。
static void Main(string[] args)
{
OracleConnection con = new OracleConnection();
//using connection string attributes to connect to Oracle Database
con.ConnectionString = "user id=****;password=****;data source=" +
"(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=server.org.net)(PORT=1521))(CONNECT_DATA=(SERVER=dedicated)(SERVICE_NAME=ora1)))";
con.Open();
Console.WriteLine("Connected to Oracle" + con.ServerVersion);
OracleCommand command = con.CreateCommand();
command.CommandText = "SELECT ITEM FROM TEST.ORDERS";
OracleDataReader reader = command.ExecuteReader();
while (reader.Read())
{
Console.WriteLine("\t{0}",
reader[0]);
}
reader.Close();
// Close and Dispose OracleConnection object
con.Close();
con.Dispose();
Console.WriteLine("Disconnected");
Console.ReadKey();
}
TEST.ORDERS 是一个视图。
第二个程序使用 ODP.Net 和 EntityFramework 并手动创建了 DbSet 类(在 Npgsql.EntityFramework 上进行了测试,效果很好,是 Oracle 视图的完美副本)。应用程序返回错误:ORA-00955。 我注意到,当将“架构”的名称更改为没有视图“ORDER”的名称时,程序会创建具有相同名称的表。 这是我的 DbSet 的开始:
[Table("ORDERS", Schema = "TEST")]
这可能是错误的。但我不知道如何构建可以访问此视图的实体。用户只有 SELECT 的权限。我想做只读操作。
【问题讨论】:
-
ORA-00955 是 name is already used by an existing object 错误。你确定这是你得到的错误吗?
-
是的,我确定。在我看来,出于某种原因,我的应用程序想要创建这样一个表,但不能因为有一个视图。我只想从这个视图中读取数据。
-
好的,我们需要看看收到应用程序错误的代码。
-
你发现了吗?这正是我似乎面临的问题。
标签: c# oracle entity-framework