Hi guys,
I took a quick look at the code, and I definitely think that it is not
DbLinq's responsibility to directly load the required assembly.
The application know what vendors it will use, is then its own
responsibility.
To me, identifiers given in the connection string MUST just allow to find an
IVendor implementation that is already loaded.
Maybe, for DbLinq in extended mode, we may consider later to use an
extension to dynamically load the assembly, but this is not the first
priority.
The code currently in SVN show that dynamically loading assemblies is a
complex task that is far beyond the DataContext's scope.
Pascal.
On Fri, Oct 24, 2008 at 12:30, Atsushi Eno <[EMAIL PROTECTED]> wrote:
> So, I tried it under Mono. It now builds, but does not run.
> There seem a couple of reasons why:
>
> - Assembly.Load("System.Data.Linq.dll" won't work, since it is
> not in current current directory but in the GAC (you can try
> Assembly.Load("System.Data.dll") on .NET - it won't work).
>
> For now I just skipped assembly load phase by just supplying
> typeof(DataContext).Assembly (= S.D.linq.dll itself).
>
> I'm not sure if it doesn't really matter in DBLinq land. It will
> fail when DbLinq.dll and DbLinq.VendorFoo.dll reside differently.
>
> - DbLinq.Vendor.Implementation.Vendor.CreateDbConnection() tries
> to create IDbConnection and then it simply fails, saying:
>
> > DataContext ctor: Assembly load failed for System.Data.SQLite.DLL:
> > System.IO.FileNotFoundException: Could not load file or assembly
> > 'System.Data.SQLite.DLL' or one of its dependencies. The system
> > cannot find the file specified.
> > File name: 'System.Data.SQLite.DLL'
>
> I guess it may happen to non-strict version of DBLinq when referenced
> -by-name assemblies do not exist at run-time (only in-use DB provider
> assembly has to exist, right?).
>
> I also noticed that .ctor(string, MappingSource) could be implemented
> easily. I'm attaching a patch. (Note: it contains mono workaround
> for the first issue. Second issue is not fixed.)
>
> Atsushi Eno
>
>
> Atsushi Eno wrote:
> > Oops, yes, I use only Makefile and relevant mono scripts that
> > mono build system generates. I've added vendor files (things
> > like SqlServerProvider.cs but for every other vendor) only in
> > mono build script. I've just added files to System.Data.Linq.csproj
> > as well.
> >
> > Jiri, thanks for taking care of it. Now it should build (it builds
> > at least with System.Data.Linq.csproj). It's already 6:30 AM, so
> > I'll try it on mono tomorrow.
> >
> > Atsushi Eno
> >
> > For now I'm going to sleep but if
> >
> > Atsushi Eno
> >
> >
> > Jiri Moudry wrote:
> >> Apologies guys - I am fixing this right now.
> >> Nobody answered my question - how do you typically compile
> >> MONO_STRICT?
> >> Is there a script checked in, or do you use MonoDevelop/SharpDevelop?
> >>
> >
> >
> > >
> >
>
>
> >
>
> Index: src/DbLinq/Data/Linq/DataContext.cs
> ===================================================================
> --- src/DbLinq/Data/Linq/DataContext.cs (revision 116918)
> +++ src/DbLinq/Data/Linq/DataContext.cs (working copy)
> @@ -106,12 +106,6 @@
> Init(new DatabaseContext(connection), null, null);
> }
>
> - [DbLinqToDo]
> - public DataContext(string fileOrServerOrConnection, MappingSource
> mapping)
> - {
> - throw new NotImplementedException();
> - }
> -
> /// <summary>
> /// Construct DataContext, given a connectionString.
> /// To determine which DB type to go against, we look for
> 'DbLinqProvider=xxx' substring.
> @@ -121,14 +115,22 @@
> /// DbLinqProvider=Mysql
> /// DbLinqProvider=Oracle etc.
> /// </summary>
> - /// <param name="connectionString">specifies file or server
> connection</param>
> + /// <param name="fileOrServerOrConnection">specifies file or
> server connection</param>
> [DbLinqToDo]
> - public DataContext(string connectionString)
> + public DataContext(string fileOrServerOrConnection)
> + : this (fileOrServerOrConnection, null)
> {
> + }
> +
> + [DbLinqToDo]
> + public DataContext(string fileOrServerOrConnection, MappingSource
> mapping)
> + {
> #region DataContext connectionString ctor
> - if (connectionString == null)
> - throw new ArgumentNullException("connectionString");
> + if (fileOrServerOrConnection == null)
> + throw new
> ArgumentNullException("fileOrServerOrConnection");
>
> + string connectionString = fileOrServerOrConnection;
> +
> System.Text.RegularExpressions.Regex reProvider
> = new
> System.Text.RegularExpressions.Regex(@"DbLinqProvider=([\w\.]+)");
>
> @@ -146,7 +148,7 @@
> #if MONO_STRICT
> //Pascal says on the forum:
> //[in MONO] "all vendors are (will be) embedded in the
> System.Data.Linq assembly"
> - assemblyToLoad = "System.Data.Linq.dll";
> + assemblyToLoad = null;
> vendorClassToLoad = match.Groups[1].Value; //eg. "MySql"
> #else
> //plain DbLinq - non MONO:
> @@ -172,8 +174,12 @@
> Assembly assy;
> try
> {
> +#if MONO_STRICT
> + assy = typeof (DataContext).Assembly;
> +#else
> //TODO: check if DLL is already loaded?
> assy = Assembly.LoadFrom(assemblyToLoad);
> +#endif
> }
> catch (Exception ex)
> {
>
>
--
Pascal.
jabber/gtalk: [EMAIL PROTECTED]
msn: [EMAIL PROTECTED]
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"DbLinq" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/dblinq?hl=en
-~----------~----~----~----~------~----~------~--~---