我有一个postgresql数据库与postGIS,我使用实体框架与dotconnect 6.7 for postgreSQL.
使用我的数据库中的下表:
CREATE TABLE geo
(
the_geom geometry,
id integer NOT NULL,
CONSTRAINT primary_key PRIMARY KEY (id),
CONSTRAINT enforce_srid_geometry CHECK (st_srid(the_geom) = 4326)
)
Run Code Online (Sandbox Code Playgroud)
并运行以下代码
class Program {
static void Main(string[] args) {
using (test_Model.test_Entities ctx = new test_Model.test_Entities()) {
var geom = new test_Model.geo();
geom.id = 0;
geom.the_geom = DbGeometry.PointFromText("POINT (1 1)", 4326).AsBinary();
ctx.geos.AddObject(geom);
ctx.SaveChanges();
}
}
Run Code Online (Sandbox Code Playgroud)
以下约束在数据库中失败
CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = 4326)
Run Code Online (Sandbox Code Playgroud)
对数据库注册的值感到好奇,我尝试了以下两个约束
CONSTRAINT enforce_srid_the_geom CHECK(st_srid(the_geom) > 4326)
CONSTRAINT enforce_srid_the_geom CHECK(st_srid(the_geom) < 4326)
Run Code Online (Sandbox Code Playgroud)
都没有奏效.由于这些是比较的整数值,因此最后三个查询中的至少一个应该是真的. …
我最近一直在处理一些性能问题,并试图找出如何以指数方式提高某些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) 我正在开发一个富客户端应用程序,它将使用Entity Framework(使用DevArt的DotConnect for Oracle)连接到中央Oracle数据库.但是,我发现此方案要求每个客户端计算机都安装Oracle客户端以连接到Oracle 10g服务器.有一个简单的方法吗?其他类型的Oracle提供程序(ODP.NET,EntLib Data,MS .NET Oracle提供程序)是否具有相同的要求?
编辑:感谢tuinstoel,我做了更多研究,并确认DevArt的dotConnect可以在Direct模式下运行,不需要安装Oracle客户端软件.这应该可以解决我使用Entity Framework连接到Oracle的问题.我还计划使用DbConnection连接到Oracle,我也可以使用DevArt的Oracle提供程序.我现在的问题是我不能让直接模式工作.
是否有人对DevArt的dotConnect for Oracle和DataDirect的ADO.NET数据提供程序进行了比较分析.
我们正在考虑将这些框架中提供的实体框架支持用于关键企业应用程序.我读过的一些文章建议如下:
任何人都可以更多地了解技术方面,以帮助决策过程吗?
我正在使用MySQL的Entity Framework.以下查询会导致错误:
var foobar = ctx.ArticleBase.OfType<ActicleSpecial>().Include("CreatedBy.Image.Location").ToList();
Run Code Online (Sandbox Code Playgroud)
错误:"MySQL不支持外部应用"我也在一个不同的查询中得到"MySQL不支持交叉应用".
我有以下数据模型: alt text http://i48.tinypic.com/5x4kdc.jpg
除了Image实体有Location实体(一对多关系)命名的Location关系,UserBase有Image关系而不是UserSpecial.
为什么我会收到此错误?如何避免这个错误?可能吗?
我试图从.Net中的oracle读取clob列,并观察到非常差的性能和大量的网络流量.
我尝试过ODP + OCI,devArt + OCI方式来访问具有相同结果的数据 - 在数据读取器中获取1000行需要大约20秒,并读取每行的clob值.
检查wireshark跟踪,结果是每次我尝试读取读取器中单行的clob字段时,在客户端和服务器之间发送了额外的多个tcp数据包.因此,对于1000行,这比仅查询一行慢1000倍.
同时,如果我在SQL Developer中运行相同的查询(我相信使用瘦jdbc驱动程序而不是oci),我会立即得到结果,包括clob值.它不会尝试查询每行的clob - 它可以一次性获取它们!
但我没有看到.net的瘦客户端.我怎样才能加快速度?请帮忙!
编辑:我的字段类型实际上是XMLTYPE存储为clob,而不是真正的clob.在它上面使用getClobVal可以将结果提高50%到10秒(1000行).但与此同时,Sql Developer立即返回结果,而不是在10秒内.
我最近从版本6更新了我的devArt dotConnect for Oracle组件.到7.2
一切似乎都很好.
但是,在编译时我发现我已经收到警告:" 发现同一个依赖程序集的不同版本之间存在冲突. "
我不知道这是否与dotConnect组件有关(它没有说),但我认为这是一个非常好的猜测.
当我点击警告时,我会看到对话框:
MS Visual Studio - 一个或多个依赖程序集具有版本冲突.
是否要通过在app.config文件中添加绑定重定向记录来修复这些冲突?
他们(MS)或它(VS)有多好,但是......它会做什么?它并没有真正告诉我.我应该走还是留?
我引用了两个DevArt dotConnect for Oracle组件:
Devart.Data -and Devart.Data.Oracle
Devart.Data:运行时版本v2.0.50727,版本5.0.555.0
Devart.Data.Oracle:运行时版本v2.0.50727,版本7.2.96.0
所以有一个版本,但不是运行时版本,不匹配.我不知道这是不是问题.如果警告信息更明确,那就太好了.据推测,"它"确切地知道问题是什么 - 为什么它不会泄露那些至关重要的信息呢?
我有另一个使用完全相同的两个引用的项目.安装更新的组件后甚至无法编译.为什么两个项目之间的区别呢?因此即使.DLL是相同的(相同的名称,磁盘上的相同位置),我删除它们然后将它们添加回第二个项目,它运行良好 - 没有错误,没有警告.但是,我回到第一个项目,仍然得到相同的警告,我删除并添加了这两个引用/ DLL - 我仍然得到相同的警告.所以我仍然不知道该做什么/我是否应该把VS提出重新定向(我想起了"老学校"电话运营商重新连接电线的每一个方向,做一些值得青少年的旋转afister aficianados ).
我将实体框架(首先是数据库的 DbContext)与 MVC 结合使用。当用户从表单保存时,我在控制器中有一个条件,根据我的一些内部标志将实体发送到插入方法的更新。
当将实体发送到 update 方法时,我将其标记为使用 进行修改context.Entry(myEntity).State = EntityState.Modified;,我调用 saveChanges() 并且一切正常。
将实体发送到插入方法时,我将其标记为使用添加,context.Entry(myEntity).State = EntityState.Added;但在调用 saveChanges() 时,我收到有关 2 个必需字段的错误...
问题是,这两个字段不为空,并且它们在保存之前有效地包含有效数据...我什至尝试在保存之前强制将新值添加到这两个字段,但出现同样的错误。
提到我正在使用 Devart DotConnect For PostgreSQL 作为数据库提供程序可能会很有用。
知道如何调试这个问题吗?
编辑:
这是错误:
一个或多个实体的验证失败。有关更多详细信息,请参阅“EntityValidationErrors”属性。
在查找此 EntityValidationErrors 时,我收到以下 2 个特定错误:
flg_actif 字段是必需的
user_creation 字段是必需的
如前所述,这些字段在保存之前填充了数据,所以我不明白发生了什么。
我正在使用 EF v4.0.30319 (system.data.entity=> v4.0 和 EntityFramework=> v4.4)
EDIT2: 只是为了澄清一点:我尝试插入的实体已存在于数据库中。该表格显示该数据库行的数据。保存时,我决定是否更新该行(这很好用),但有时,我需要将编辑的行作为新寄存器插入,而不是更新它以保留数据库中更改的历史记录。
SQLite具有有趣的“功能”,可让您将任何内容存储在任何字段中,而不管其数据类型如何。
http://www.sqlite.org/different.html#typing
我必须读取一些外部创建的SQLite文件,这些文件是通过(ab)使用此“功能”创建的。它们具有定义为VARCHAR(30)的字段,但正在使用该字段存储最多100个字符或更多的字符串。如果直接调用SQLite DLL来存储数据,SQLite会很高兴地做到这一点而不会进行任何修整。
我当前正在使用具有SQLite支持的DevArt UniDAC 3.70.0.19来读取这些文件,但是它在定义字段时会相当尊重字段的大小,因此会创建一个长度为30个字符的TStringField对象。我无法访问超出30个字符限制的所有字符。
我知道所有可用的用于SQLite的Delphi解决方案,但是有人可以告诉我哪一个可以处理此“功能”吗?
我有一个使用Devart和Entity Framework访问的Oracle数据库.
有一个叫做IMPORTJOBS列的表STATUS.
我还有多个进程同时运行.他们每个人都读取IMPORTJOBS有状态的第一行'REGISTERED',将其置于状态'EXECUTING',如果完成则将其置于状态'EXECUTED'.
现在因为这些进程并行运行,我相信可能会发生以下情况:
REGISTERED,REGISTERED,EXECUTING.进程B不应该读取第10行,因为进程A已经读取了它并且将更新其状态.
我该怎么解决这个问题?在事务中放入读取和更新?或者我应该使用一些版本控制方法或其他什么?
谢谢!
编辑:感谢接受的答案我得到了它的工作并在此处记录:http://ludwigstuyck.wordpress.com/2013/02/28/concurrent-reading-and-writing-in-an-oracle-database.
devart ×10
oracle ×4
c# ×3
dotconnect ×3
.net ×2
postgresql ×2
ado.net ×1
app-config ×1
asp.net-mvc ×1
clob ×1
dapper ×1
delphi ×1
mysql ×1
odp.net ×1
oracledb ×1
sqlite ×1
transactions ×1