我的连接字符串如下:
<add name="RollCallDBEntities" connectionString="metadata=res://System.Engine/RollcallNS.csdl|res://System.Engine/RollcallNS.ssdl|res://System.Engine/RollcallNS.msl;provider=Devart.Data.Oracle;provider connection string="User Id=user;Password=password;Server=127.0.0.1;Direct=True;Sid=ORCL"" providerName="System.Data.EntityClient" />
Run Code Online (Sandbox Code Playgroud)
我的代码如下:
using (var db= new RollCallDBEntities()) //ok
{
var query = db.TBL_ROLLCALL.ToList(); //Unable to load the specified metadata resource.
}
Run Code Online (Sandbox Code Playgroud)
我的集会:
System.Engine
Run Code Online (Sandbox Code Playgroud)
有人有主意吗?
这些链接没有解决我的问题:
MetadataException:无法加载指定的元数据资源
实体框架无法加载指定的元数据资源
实体框架:无法加载指定的元数据资源
无法加载指定的元数据资源
我正在为我的应用程序使用DevArt的dotConnect和Entity Developer.我使用Entity-First功能创建了表格.
我注意到许多列类型都设置为CLOB.我只有MySQL和Microsoft SQL服务器的经验,所以我不确定是否将CLOB用于该应用程序.我做了一些阅读,发现CLOB用于大量数据.
问题是:
在大多数字段中使用CLOB,例如用户的性别(应该是varchar(1))还是全名,可行吗?将CLOB字段转换为VARCHAR2的步骤需要删除列然后重新创建它,并且在DevArt的实体资源管理器中有问题,所以我想尽可能避免使用它.编辑:我刚刚发现,如果为字符串字段设置最大长度,它将自动为VARCHAR2.
Oracle中的TINYTEXT是否有任何等价物?
我正在使用LINQ to Entities来显示分页结果.但我在使用的组合问题Skip(),Take()和OrderBy()调用.
一切正常,除了OrderBy()分配得太晚.之后的结果集已被削减它的执行Skip()和Take().
因此,每个结果页面都按顺序排列.但是,对一页数据进行排序,而不是对整个集合进行排序,然后使用Skip()和限制这些记录Take().
如何设置这些语句的优先级?
var query = ctx.EntitySet.Where(/* filter */).OrderByDescending(e => e.ChangedDate);
int total = query.Count();
var result = query.Skip(n).Take(x).ToList();
Run Code Online (Sandbox Code Playgroud)
一种可能的解决方案是将聚簇索引应用于按列排序,但此列经常更改,这会降低插入和更新时的数据库性能.我真的不想那样做.
我运行ToTraceString()了我的查询,我们实际上可以看到order by应用于结果集.不幸的是最后.:(
SELECT
-- columns
FROM (SELECT
-- columns
FROM (SELECT -- columns
FROM ( SELECT
-- columns
FROM table1 AS Extent1
WHERE EXISTS (SELECT
-- single constant column
FROM table2 AS Extent2
WHERE (Extent1.ID = …Run Code Online (Sandbox Code Playgroud) 我在oracle 11g中有一个包如下:
CREATE OR REPLACE PACKAGE "HRS.PKG_TRAINING_SP" as
TYPE T_CURSOR IS REF CURSOR;
procedure GETPERSONNELTRAINIGLIST(
personnel_Id_in in string,
base_date_in in string,
is_current_in in number,
lst OUT T_CURSOR );
end;
Run Code Online (Sandbox Code Playgroud)
如何GETPERSONNELTRAINIGLIST使用Entity Framework(代码优先)执行上述过程package()?
注意:我正在使用Entity Framwork 6.0(代码优先)和devart EF Providerfor Oracle.
更新: 我使用以下代码:
var param1 = new OracleParameter("personnel_Id_in", OracleDbType.VarChar, "c5eb5589-8fee-47b6-85ad-261a0307cc16", ParameterDirection.Input);
var param2 = new OracleParameter("base_date_in", OracleDbType.VarChar, "1112", ParameterDirection.Input);
var param3 = new OracleParameter("is_current_in", OracleDbType.Number, 1, ParameterDirection.Input);
var ATests =
db.Database.SqlQuery<ATest>(
"BEGIN PKG_TRAINING_SP.GETPERSONNELTRAINIGLIST(:personnel_Id_in, :base_date_in, :is_current_in); end;",
param1, param2, param3).ToList();
Run Code Online (Sandbox Code Playgroud)
但低于错误: …
如何在Sourcetree中添加Devart的Code Compare作为自定义差异和合并工具?
有人可以告诉我,为什么Linq to Entities会将多个关系转换为1个关系left outer join而不是inner join?因为对DB本身存在引用约束以确保在右表中有记录,所以inner join应该使用它(并且它将更快地工作)
如果关系很多,那么0..1 left outer join就是正确的.
是否有可能以某种方式编写LINQ,因此它将转换为inner join而不是left outer join.它会大大加快查询执行速度......我以前没有使用过eSQL,但在这种情况下使用它会是明智的吗?它会解决我的问题吗?
我更新了我的标签,以包含我在后台使用的技术:
如果有人可以测试在Microsoft SQL服务器上是否也是如此,如果这是Devart的问题或者它是一般的L2EF功能,它也会给我一些见解......但我怀疑EF是罪魁祸首.
我正面临着一个让我疯狂几天的问题,希望有人可以帮助我.这里是 ;
我正在使用EF4和oracle数据库,使用dotConnect从devart作为提供者的oracle.我有wcf服务方法,它调用下面的DeleteCabinet方法;
public void DeleteCabinet(string pRID)
{
using(TransactionScope tranScope = new TransactionScope())
{
DBUtils.DeleteCabinetAndShelves(pRecordId);
//throw exception to test record not deleted
throw new Exception("xxx something has happened test xxx");
tranScope.Complete();
}
}
Run Code Online (Sandbox Code Playgroud)
DBUtils.DeleteCabinetAndShelves如下所示;
public void DeleteCabinetAndShelves(string pRecordId)
{
using(var context = new EdrmEntities())
{
var cabinet = context.Cabinets.Include("Shelves").Single(p => p.RID == pCabinetRID);
//mark all cabinet shelves for deletion
if (cabinet.Shelves != null)
{
foreach (var tempShelf in cabinet.Shelves.ToList())
{
context.DeleteObject(tempShelf);
}
}
//mark cabinet for deletion
context.DeleteObject(cabinet);
//save
context.SaveChanges(); …Run Code Online (Sandbox Code Playgroud) 为什么Oracle ODP不识别参数Unicode = true和Devart的Provider呢?
当我有包含字符串的数据:"ñãõ,éóúý"时,我的asp.net应用程序显示"???,????" 如果我使用的是Oracle的ODP.当我尝试将属性Unicode=true放在connectionstring中时,它表示它是一个无效的属性.
Devart的提供商也可以复制相同的行为.但实际上,当我将Unicode=true属性放在连接字符串中时,所有内容都很好地显示在我的asp.net应用程序的屏幕上.
为什么会这样?我可以在Oracle Data Provider(Oracle.DataAccess.Client)中使用哪个属性,以便我可以按照我想要的方式显示我的角色?
几天前我正在尝试从Devart开始使用名为EntityDAC的delphi的新ORM,我正在阅读特定于LINQ部分的文档,当我看到类似的内容时:
Linq.From(Emp).Where(Emp['Sal'] > 1000)
Run Code Online (Sandbox Code Playgroud)
我得说,在我看到的第一刻唤醒我.表达"Emp ['Sal']> 1000"不是lambda表达式?!因为试用版本是这个组件没有来源我无法弄清楚如何声明函数/过程.
参考:http://www.devart.com/entitydac/docs/ - > Linq查询 - > Linq语法 - >向下滚动到Where会话
我最近一直在处理一些性能问题,并试图找出如何以指数方式提高某些Oracle数据库调用的性能.
技术:
我熟悉DataTableDapper和SQL Server 的使用和表值参数,并希望使用上述技术复制它.我还没有能够重现下面的解决方案来使用Devart和OracleManaged:
下面的代码不是我正在运行的......这是一个释义的例子.我只需要与Oracle一起工作的东西来传递DataTable或在查询/插入中使用的对象数组.
SQL Server:
CREATE TYPE MyCustomerInfo AS TABLE
(
Id BIGINT NOT NULL,
--Name NVARCHAR(32) NOT NULL,
--...
);
Run Code Online (Sandbox Code Playgroud)
C#for SQL Server:
const string getCustomersSql = @"
SELECT
c.Id,
--c.Name
--...
FROM @myCustomers mc
LEFT JOIN Customers c
ON c.Id = mc.Id";
var myCustomers = new DataTable();
myCustomers.Columns.Add("Id", typeof(long));
//...
myCustomers.Rows.Add(1);
myCustomers.Rows.Add(2);
var customers = await sqlDbConnection.QueryAsync<Customer>(getCustomersSql, new { myCustomers = myCustomers.AsTableValuedParameter("MyCustomerInfo") }); …Run Code Online (Sandbox Code Playgroud)