Jump to content


Photo
- - - - -

Problems With Linqpad And Ef4.2 Codefirst


  • Please log in to reply
8 replies to this topic

#1 Olaf K.

Olaf K.

    New Member

  • Members
  • Pip
  • 1 posts

Posted 12 October 2011 - 12:00 AM

Hi,

i cant manage to create a connection using EF4.2 CodeFirst. (LinqPAD 4.36.2)

I used Entity Framework (POCO) connection and entered my DLL, which was correctly recognized. I selected the Context datatype and after that the app.config, no problem so far.

But after clicking OK the connection is marked with a red cross and the tooltip states the following error messge (roughly translated into english, i use a german framework version):

The Object of type P32EBDataContext (this is my context class) cannot be convertes into type System.Data.Entity.Infrastructure.IObjectContextAdapter

Am i doing something wrong? Or isnt it possible with this version?

Thanks
Olaf

#2 JoeAlbahari

JoeAlbahari

    Super Veteran Member

  • Members
  • PipPipPipPipPipPipPipPipPipPipPip
  • 529 posts
  • Gender:Male
  • Location:Perth, Australia

Posted 12 October 2011 - 07:51 PM

LINQPad doesn't as yet support EF 4.2. However you can work around the problem by adding a binding redirect.

Modify the LINQPad.exe.config as follows:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
  </startup>
  <runtime>
    <legacyUnhandledExceptionPolicy enabled="1" />
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" />
        <bindingRedirect oldVersion="4.1.0.0" newVersion="4.2.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

Also, make sure you uninstall EF 4.1 if you haven't already done so.

Edited by JoeAlbahari, 12 October 2011 - 07:53 PM.


#3 JoeAlbahari

JoeAlbahari

    Super Veteran Member

  • Members
  • PipPipPipPipPipPipPipPipPipPipPip
  • 529 posts
  • Gender:Male
  • Location:Perth, Australia

Posted 14 November 2011 - 06:58 PM

Update: Support for EF 4.2 (in the form of a binding redirect) has been added to the latest beta.

Note that you must UNINSTALL EF 4.1 (so that it's no longer in the GAC) in order for this to work!

Joe

#4 Tomfy

Tomfy

    New Member

  • Members
  • Pip
  • 2 posts

Posted 16 November 2011 - 07:29 AM

I have installed the latest beta (v4.36.5), uninstalled EF4.1 (actually update 1), added EF4.2 to additional references. The connection tests okay and there are no issues executing queries against the context.

But in the schema explorer window on the left it does not list the context's schema and has the error message: "MyContext (Error: could not load file or assembly 'EntityFramework, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The system cannot find the file specified.)"

Any idea on what could be wrong?

Tim

#5 JoeAlbahari

JoeAlbahari

    Super Veteran Member

  • Members
  • PipPipPipPipPipPipPipPipPipPipPip
  • 529 posts
  • Gender:Male
  • Location:Perth, Australia

Posted 16 November 2011 - 11:45 PM

You'll either need to GAC EF 4.2 or ensure that its assembly is in the same folder as your typed DataContext. Otherwise LINQPad won't be able to find it.

You shouldn't need to add an explicit reference to the assembly in your queries (in fact, it won't help because at that point it's too late - LINQPad must be able to locate the EF assembly in order to infer the schema and populate the treeview - PRIOR to any queries running).

Edited by JoeAlbahari, 16 November 2011 - 11:48 PM.


#6 docgregt

docgregt

    New Member

  • Members
  • Pip
  • 2 posts

Posted 30 November 2011 - 07:19 AM

I am having the same problem. I am using LinqPad 4.37.2. Please assist with getting this to work with 4.1 as we are using that version in production.

Thanks,
Greg

#7 Tomfy

Tomfy

    New Member

  • Members
  • Pip
  • 2 posts

Posted 01 December 2011 - 11:23 PM

I followed @JoeAlbahari's instructions and installed EF 4.2 in the GAC. Merely having EntityFramework.dll in the same folder as the dll with the context reference didn't work.

BUT - a new problem has arisen: some days after everything was working, any queries against the context throw an exception:

The type or namespace name 'Infrastructure' does not exist in the namespace 'System.Data.Entity'
There was also an assembly reference error - press F4 to fix:
   Metadata file 'EntityFramework.dll' could not be found

I thought it may have been caused by the installation of EntityFramework.Migrations (the only change) but I removed it - and still the same exception. I built another EF 4.2 POCO context with Migrations and it works fine.

Any suggestions on how to fix this?

#8 joer00

joer00

    Active Member

  • Members
  • PipPip
  • 11 posts

Posted 20 December 2011 - 08:40 AM

I had those problems too, however it works for me doing the following:

a.) I create a "dynamic" DBContext which creates the DBSets dynamically based on my assembly. This has to be in the linqpad folder

b.) My dbcontext is build against a newer version of EF4 that 4.2.0.0 so I got first the error that LINQPAd cannot find 4.2.0.0. I donwloaded that dll and did put it into the linqpad folder all works.

HOWEVER that whole code first makes to me no sense in LINQPAD as it is the same as connecting directly to the database. I will start a separate thread to ask if I am doing something wrong here.

Joe Robe

#9 JoeAlbahari

JoeAlbahari

    Super Veteran Member

  • Members
  • PipPipPipPipPipPipPipPipPipPipPip
  • 529 posts
  • Gender:Male
  • Location:Perth, Australia

Posted 20 December 2011 - 08:26 PM

The latest LINQPad beta doesn't statically reference EntityFramework.dll, so most (or all) of these problems should go away.

Let me know if it still isn't working for you.

Joe




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users