jonpryor / dblinq2007

Automatically exported from code.google.com/p/dblinq2007
0 stars 0 forks source link

Enum Column type => CodeDom Exception #287

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
What steps will reproduce the problem?
1. asterisk database (FreOBX, Elastix, TrixBox)
2. DbMetal to generate POCO
   args:-provider:MySql -database:asterisk -server:192.168.11.555 -user:root -password:AAAARRRGHHHH -namespace:FreePBXAsterisk -code:FreePBX.cs -debug
3. Load DbLinq into VS.

What is the expected output? What do you see instead?
Expected output: File FreePBX.cs 
Got:
DbLinq Database mapping generator 2008 version 0.20
for Microsoft (R) .NET Framework version 3.5
Distributed under the MIT licence (http://linq.to/db/license)

>>> Reading schema from MySQL database
<<< writing C# classes in file 'FreePBX.cs'
DbMetal: System.IO.FileLoadException: The given assembly name or codebase was 
in valid. (Exception from HRESULT: 0x80131047)
   at System.RuntimeTypeHandle._GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, Boolean loadTypeFromPartialName)
   at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark)
   at System.RuntimeType.PrivateGetType(String typeName, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark)
   at System.Type.GetType(String typeName)
   at DbMetal.Generator.CodeDomGenerator.ToCodeTypeReference(Column column) in D:\SRC\DBLinq\src\DbMetal\Generator\CodeDomGenerator.cs:line 898
   at DbMetal.Generator.CodeDomGenerator.CreateChangingMethodDecl(Column column) in D:\SRC\DBLinq\src\DbMetal\Generator\CodeDomGenerator.cs:line 892
   at DbMetal.Generator.CodeDomGenerator.<GenerateExtensibilityDeclarations>b__28(Column c) in D:\SRC\DBLinq\src\DbMetal\Generator\CodeDomGenerator.cs:line 868
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
   at System.Linq.Enumerable.<SelectManyIterator>d__14`2.MoveNext()
   at System.Linq.Enumerable.<ConcatIterator>d__71`1.MoveNext()
   at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
   at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
   at DbMetal.Generator.CodeDomGenerator.GenerateExtensibilityDeclarations(CodeTypeDeclaration entity, Table table) in D:\SRC\DBLinq\src\DbMetal\Generator\CodeDomGenerator.cs:line 867
   at DbMetal.Generator.CodeDomGenerator.GenerateTableClass(Table table, Database database) in D:\SRC\DBLinq\src\DbMetal\Generator\CodeDomGenerator.cs:line 683
   at DbMetal.Generator.CodeDomGenerator.GenerateCodeDomModel(Database database) in D:\SRC\DBLinq\src\DbMetal\Generator\CodeDomGenerator.cs:line 176
   at DbMetal.Generator.CodeDomGenerator.Write(TextWriter textWriter, Database dbSchema, GenerationContext context) in D:\SRC\DBLinq\src\DbMetal\Generator\CodeDomGenerator.cs:line 86
   at DbMetal.Generator.Implementation.Processor.GenerateCode(Parameters parameters, Database dbSchema, ISchemaLoader schemaLoader, String filename) in D:\SRC\DBLinq\src\DbMetal\Generator\Implementation\Processor.cs:line 234
   at DbMetal.Generator.Implementation.Processor.WriteSchema(Database dbSchema,ISchemaLoader schemaLoader, Parameters parameters) in D:\SRC\DBLinq\src\DbMetal\Generator\Implementation\Processor.cs:line 178
   at DbMetal.Generator.Implementation.Processor.ProcessSchema(Parameters parameters) in D:\SRC\DBLinq\src\DbMetal\Generator\Implementation\Processor.cs:line 116

What version of the product are you using? On what operating system?
Version(DbLinq)=0.20.1
Os=Vista
IDE=VS2010

Please provide any additional information below.

DbMetal project => CodeDomGenerator.cs
Line 880 wrapped in try/catch

        void GenerateExtensibilityDeclarations(CodeTypeDeclaration entity, Table table)
        {
            try 
            {
                var partialMethods = new[] { CreatePartialMethod("OnCreated") }
                    .Concat(table.Type.Columns.Select(c => new[] { CreateChangedMethodDecl(c), CreateChangingMethodDecl(c) })
                        .SelectMany(md => md)).ToArray();
                partialMethods.First().StartDirectives.Add(new CodeRegionDirective(CodeRegionMode.Start, "Extensibility Method Declarations"));
                partialMethods.Last().EndDirectives.Add(new CodeRegionDirective(CodeRegionMode.End, null));
                entity.Members.AddRange(partialMethods);
            }
            catch
            {
                prolematic_tables.Add(table.Name);
            }
        }

Caught errors in
Tables
    freepbx_log column "level" type enum

Workaround:
    Added problematic tablenames...

        List<string> prolematic_tables =
            new List<string>()
            {
                "asterisk.freepbx_log"
            };

    in line 184 added patch to skip problematic tables
            foreach (Table table in database.Tables)
            {
                if (prolematic_tables.Contains(table.Name))
                {
                    continue;
                } 
                _namespace.Types.Add(GenerateTableClass(table, database));
            }

Result:
    FreePBX.cs

Uncomment classes for problematic tables
        /*
        public Table<FreePbxLog> FreePbxLog
        {
            get
            {
                return this.GetTable<FreePbxLog>();
            }
        }
        */      

Output (FreePBX.cs Added into Project
to make it compile clean add references (project refs)
    DbLinq
    MySlq.Data
        DbLinq.MySql

Miljenko Cvjetko
www.holisticware.com 

Original issue reported on code.google.com by miljenko...@gmail.com on 7 Oct 2010 at 11:43

GoogleCodeExporter commented 9 years ago
Forgot component: DbMetal

Original comment by miljenko...@gmail.com on 7 Oct 2010 at 11:47

GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
With types "Enum" and "Set" was error. (Issue 287 <=> Issue 270 <=> Issue 267)

Original comment by viru...@gmail.com on 1 Feb 2011 at 9:29