<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.microsoft.co.il/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Ido Flatow&amp;#39;s Blog&lt;h3&gt;Veni Vidi Scripsi&lt;/h3&gt; : Devart, Oracle</title><link>http://blogs.microsoft.co.il/blogs/idof/archive/tags/Devart/Oracle/default.aspx</link><description>Tags: Devart, Oracle</description><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>Devart’s Entity Framework provider for Oracle, now for EF4 !</title><link>http://blogs.microsoft.co.il/blogs/idof/archive/2010/02/09/devart-s-entity-framework-provider-for-oracle-now-for-ef4.aspx</link><pubDate>Tue, 09 Feb 2010 21:45:37 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:515689</guid><dc:creator>Ido Flatow</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/idof/rsscomments.aspx?PostID=515689</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/idof/archive/2010/02/09/devart-s-entity-framework-provider-for-oracle-now-for-ef4.aspx#comments</comments><description>&lt;div align="left" dir="ltr"&gt; &lt;p align="left"&gt;It’s finally here, an Entity Framework 4 provider for oracle, complements of &lt;a href="http://www.devart.com/"&gt;Devart&lt;/a&gt;.&lt;/p&gt;  &lt;p align="left"&gt;You can download the provider (trial version of course) from &lt;a href="http://www.devart.com/dotconnect/oracle/download.html"&gt;here&lt;/a&gt;, look for version 5.55 beta.&lt;/p&gt; &lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=515689" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/idof/archive/tags/EF/default.aspx">EF</category><category domain="http://blogs.microsoft.co.il/blogs/idof/archive/tags/Entity+Framework/default.aspx">Entity Framework</category><category domain="http://blogs.microsoft.co.il/blogs/idof/archive/tags/Devart/default.aspx">Devart</category><category domain="http://blogs.microsoft.co.il/blogs/idof/archive/tags/Oracle/default.aspx">Oracle</category></item><item><title>Migrating Entity Framework’s EDM from Sql Server to Oracle</title><link>http://blogs.microsoft.co.il/blogs/idof/archive/2009/06/16/migrating-entity-framework-s-edm-from-sql-server-to-oracle.aspx</link><pubDate>Wed, 17 Jun 2009 04:06:42 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:338365</guid><dc:creator>Ido Flatow</dc:creator><slash:comments>58</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/idof/rsscomments.aspx?PostID=338365</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/idof/archive/2009/06/16/migrating-entity-framework-s-edm-from-sql-server-to-oracle.aspx#comments</comments><description>&lt;div align="left" dir="ltr"&gt; &lt;p align="left"&gt;A few weeks ago I&amp;#39;ve published a &lt;a href="http://blogs.microsoft.co.il/blogs/idof/archive/2009/05/02/new-entity-framework-provider-for-oracle-from-dataconnect.aspx"&gt;post&lt;/a&gt; regarding DataDirect&amp;#39;s new Oracle provider that supports EF.&lt;/p&gt;  &lt;p align="left"&gt;I was able to download DataDirect’s provider only this week, so it will take me a few more days to examine it and post some notes. &lt;/p&gt;  &lt;p align="left"&gt;As for now, I would like to share with you some of the issues in EF we’ve came across migrating from Sql Server to Oracle, using the provider from &lt;a href="http://www.devart.com/dotconnect/entityframework.html"&gt;DevArt&lt;/a&gt;.&lt;/p&gt;  &lt;p align="left"&gt;BTW, we haven’t fully migrated to Oracle just yet, our project supports working with both databases using a factory for the creation of the EDM and the ObjectContext’s connection.&lt;/p&gt;  &lt;p align="left"&gt;If you use EF at its simplest form, creating entity types and mapping them to tables, you won’t have many problems, the actual problems begins when you use the more extensive options EF has to offer, including user defined queries, using stored procedures etc..&lt;/p&gt;  &lt;p align="left"&gt;&lt;strong&gt;Type matching &lt;/strong&gt;&lt;/p&gt;  &lt;p align="left"&gt;Different DBs have different types, the following &lt;a href="http://msdn.microsoft.com/en-us/library/ms151817(SQL.90).aspx"&gt;table&lt;/a&gt; will help you decide which types to give your columns in your new Oracle tables.&lt;/p&gt;  &lt;p align="left"&gt;&lt;strong&gt;LOB problems &lt;/strong&gt;&lt;/p&gt;  &lt;p align="left"&gt;If you use Oracle’s LOB types (BLOB, CLOB…) you will have a &lt;a href="http://download.oracle.com/docs/cd/B10500_01/server.920/a96540/queries5a.htm"&gt;problem&lt;/a&gt; doing Union/Minus/Intersect queries, so if you have LOB columns in your entity and you currently use Linq to Entities queries with Union/Except/Intersect calls, you’ll need to restructure your queries.&lt;/p&gt;  &lt;p align="left"&gt;&lt;strong&gt;Writing your own queries&lt;/strong&gt;&lt;/p&gt;  &lt;p align="left"&gt;If you decide to write your own sql select statement (using DefiningQuery), you will notice a bug that exists in Devart’s provider – If you write a sql statement like this:&lt;/p&gt;  &lt;p align="left"&gt;Select column1, column2 from …&lt;/p&gt;  &lt;p align="left"&gt;The generated sql statement that will be executed in the DB will look like this:&lt;/p&gt;  &lt;p align="left"&gt;Select &amp;quot;extent1&amp;quot;.&amp;quot;column1&amp;quot;, &amp;quot;extent1&amp;quot;.&amp;quot;column2&amp;quot; from (...) &amp;quot;extent1&amp;quot;&lt;/p&gt;  &lt;p align="left"&gt;Since in oracle there is a difference between selecting “column1” and column1, your query will raise an error. To solve this problem, you just do the following fix to your sql statement:&lt;/p&gt;  &lt;p align="left"&gt;Select column1 as “column1”, column2 as “column2” from …&lt;/p&gt;  &lt;p align="left"&gt;I assume this &lt;a href="http://www.devart.com/forums/viewtopic.php?t=14670"&gt;bug&lt;/a&gt; will be fixed in next versions of the provider and I didn’t had the chance to see how DataDirect’s provider works, but I have the feeling they don’t have this problem (I hope I won’t be surprised).&lt;/p&gt;  &lt;p align="left"&gt;&lt;strong&gt;Returning Keys and ResultBinding from Stored Procedures&lt;/strong&gt;&lt;/p&gt;  &lt;p align="left"&gt;When we write our own Stored Procedures for CUD operations, we sometimes have to deal returning auto-generated keys and computed values.&lt;/p&gt;  &lt;p align="left"&gt;In Sql Server this is easy, we use the Select statement and select the values we want to return from the SP, and in the EF’s mapping we use ResultBinding to specify how to copy these values to their target properties.&lt;/p&gt;  &lt;p align="left"&gt;In Oracle things get a bit tricky – you cannot write Select statements inside a SP without directing them to variables, so your SP needs to have an Out parameter of REF CURSOR type and use this parameter to hold the new values you want to return.&lt;/p&gt;  &lt;p align="left"&gt;You’ll need to add this parameter to your Function element:&lt;/p&gt;  &lt;p align="left"&gt;&amp;lt;Parameter Name=&amp;quot;VCUR&amp;quot; Type=&amp;quot;REF CURSOR&amp;quot; Mode=&amp;quot;In&amp;quot; /&amp;gt;&lt;/p&gt;  &lt;p align="left"&gt;(There’s a bug with the Mode enumeration, so you can’t use Out)&lt;/p&gt;  &lt;p align="left"&gt;And add a ResultBinding to your ModificationFunctionMapping:&lt;/p&gt;  &lt;p align="left"&gt;&amp;lt;ResultBinding Name=&amp;quot;DEPTNO&amp;quot; ColumnName=&amp;quot;NEW_DEPTNO&amp;quot; /&amp;gt;&lt;/p&gt;  &lt;p align="left"&gt;This sounds easy enough, but with EF there is a small problem – if you add a parameter to your SP, you also have to map it to a property in your conceptual model, so we find ourselves forced to create a “dummy” property to hold the return value of the SP.&lt;/p&gt;  &lt;p align="left"&gt;The EDM will look something like this (taken from example given by &lt;a href="http://devart.com/forums/viewtopic.php?t=14031"&gt;Devart’s support team with some changes&lt;/a&gt;):&lt;/p&gt;  &lt;p align="left"&gt;&amp;lt;!-- SSDL content --&amp;gt;    &lt;br /&gt;...     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;EntityContainer Name=&amp;quot;ModelStoreContainer&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;EntitySet Name=&amp;quot;DEPT&amp;quot; EntityType=&amp;quot;Model.Store.DEPT&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;DefiningQuery&amp;gt;select …, to_blob(null) as “Column1” from dept&amp;lt;/DefiningQuery&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/EntitySet&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/EntityContainer&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;EntityType Name=&amp;quot;DEPT&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Key&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;PropertyRef Name=&amp;quot;DEPTNO&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Key&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Property Name=&amp;quot;DEPTNO&amp;quot; Type=&amp;quot;int&amp;quot; Nullable=&amp;quot;false&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Property Name=&amp;quot;DNAME&amp;quot; Type=&amp;quot;VARCHAR2&amp;quot; MaxLength=&amp;quot;14&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Property Name=&amp;quot;LOC&amp;quot; Type=&amp;quot;VARCHAR2&amp;quot; MaxLength=&amp;quot;13&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Property Name=&amp;quot;COLUMN1&amp;quot; Type=&amp;quot;BLOB&amp;quot; MaxLength=&amp;quot;1&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/EntityType&amp;gt;     &lt;br /&gt;...     &lt;br /&gt;&amp;lt;!-- CSDL content --&amp;gt;     &lt;br /&gt;...     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;EntityType Name=&amp;quot;DEPT&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Key&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;PropertyRef Name=&amp;quot;DEPTNO&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Key&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Property Name=&amp;quot;DEPTNO&amp;quot; Type=&amp;quot;Int32&amp;quot; Nullable=&amp;quot;false&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Property Name=&amp;quot;DNAME&amp;quot; Type=&amp;quot;String&amp;quot; MaxLength=&amp;quot;14&amp;quot; Unicode=&amp;quot;true&amp;quot; FixedLength=&amp;quot;false&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Property Name=&amp;quot;LOC&amp;quot; Type=&amp;quot;String&amp;quot; MaxLength=&amp;quot;13&amp;quot; Unicode=&amp;quot;true&amp;quot; FixedLength=&amp;quot;false&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Property Name=&amp;quot;COLUMN1&amp;quot; Type=&amp;quot;Binary&amp;quot; MaxLength=&amp;quot;1&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/EntityType&amp;gt;     &lt;br /&gt;...     &lt;br /&gt;&amp;lt;!-- C-S mapping content --&amp;gt;     &lt;br /&gt;...     &lt;br /&gt;&amp;lt;EntityTypeMapping TypeName=&amp;quot;IsTypeOf(Model.DEPT)&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;MappingFragment StoreEntitySet=&amp;quot;DEPT&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;ScalarProperty Name=&amp;quot;DEPTNO&amp;quot; ColumnName=&amp;quot;DEPTNO&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;ScalarProperty Name=&amp;quot;DNAME&amp;quot; ColumnName=&amp;quot;DNAME&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;ScalarProperty Name=&amp;quot;LOC&amp;quot; ColumnName=&amp;quot;LOC&amp;quot; /&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;ScalarProperty Name=&amp;quot;COLUMN1&amp;quot; ColumnName=&amp;quot;COLUMN1&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/MappingFragment&amp;gt;     &lt;br /&gt;&amp;lt;/EntityTypeMapping&amp;gt;     &lt;br /&gt;...&lt;/p&gt;  &lt;p align="left"&gt;Of course, once you do the above you’ll have a Blob column in your Select statement and you’ll have the LOB problem I’ve discussed previously.&lt;/p&gt;  &lt;p align="left"&gt;The SP problem was one of our pitfalls migrating to Oracle, and as I understand, Devart will probably fix this in future versions, I just hope DataDirect’s provider doesn’t suffer from the same problem.&lt;/p&gt;  &lt;p align="left"&gt;These where some problems we’ve faced migrating to Oracle. There are of course other issues such as rewriting SP, renaming SP parameters due to differences of naming conventions and other problems you face in these cases regardless of EF.&lt;/p&gt;  &lt;p align="left"&gt;I will check DataDirect’s provider and will publish some notes in the future.&lt;/p&gt; &lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=338365" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/idof/archive/tags/EF/default.aspx">EF</category><category domain="http://blogs.microsoft.co.il/blogs/idof/archive/tags/Entity+Framework/default.aspx">Entity Framework</category><category domain="http://blogs.microsoft.co.il/blogs/idof/archive/tags/tips+and+tricks/default.aspx">tips and tricks</category><category domain="http://blogs.microsoft.co.il/blogs/idof/archive/tags/Linq/default.aspx">Linq</category><category domain="http://blogs.microsoft.co.il/blogs/idof/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/idof/archive/tags/DataDirect/default.aspx">DataDirect</category><category domain="http://blogs.microsoft.co.il/blogs/idof/archive/tags/Devart/default.aspx">Devart</category><category domain="http://blogs.microsoft.co.il/blogs/idof/archive/tags/Oracle/default.aspx">Oracle</category><category domain="http://blogs.microsoft.co.il/blogs/idof/archive/tags/Stored+Procedure/default.aspx">Stored Procedure</category><category domain="http://blogs.microsoft.co.il/blogs/idof/archive/tags/Sql+Server/default.aspx">Sql Server</category></item></channel></rss>