DbEntry.Net3.6中出错~

Dec 7, 2010 at 4:39 AM

在DbEntry.NET 3.6 中,使用如下方式定义了一个类

using System;
using System.Collections.Generic;
using Lephone.Data.Definition;
using Lephone.Linq;

namespace QuickCourse.Model
{
    public abstract class TemplateFileInfo :LinqObjectModel<TemplateFileInfo>
    {
        //�ֶ�����
        [Length(1, 64)]
        public abstract string TemplatePackageGUID { get; set; } //ģ���ID
        [Length(1, 64)]
        public abstract string TemplateGUID { get; set; } //ģ��ID
        public abstract int TemplateTypeValue { get; set; } //ģ�����ͣ�0 - ��̬ҳ��ģ�� 1 - ��ҳģ�� 2 - ��Ŀҳģ�� 3 - ����ҳģ�� 4 - Ƕ��ģ��
        [Length(1, 80)]
        public abstract string TemplateTypeName { get; set; } //ģ����������
        [Length(1, 80)]
        public abstract string TemplateName { get; set; } //ģ����������
        [Length(1, 255)]
        public abstract string TemplateFileName { get; set; } //ģ���ļ�����
        public abstract string TemplateValue { get; set; } //ģ���ļ�����


        public abstract TemplateFileInfo Init(string TemplagePackageGUID, string TemplateGUID,int TemplateTypeValue, string TemplateTypeName, string TemplateName, string TemplateFileName, string TemplateValue);

        public static TemplateFileInfo GetTemplateInfo(Guid GTemplateGUID)
        {
            return FindOne(p => p.TemplateGUID == GTemplateGUID.ToString());
        }

        public static TemplateFileInfo GetTemplateInfo(Int32 ID)
        {
            return FindById(ID);
        }

    }
}

以及:

using System;
using System.Collections.Generic;
using Lephone.Data.Definition;
using Lephone.Linq;


namespace QuickCourse.Model
{
    
    
    public abstract class AdminInfo :LinqObjectModel<AdminInfo>
    {
        [Length(1, 64), Index(UNIQUE = true)]
        public abstract string AdminGUID { get; set; }
        [Length(1, 50)]
        public abstract string AdminLoginName { get; set; }
        [Length(1, 50)]
        public abstract string AdminPassword { get; set; }
        [Length(1, 30)]
        public abstract string AdminName { get; set; }
        [Length(1, 50)]
        public abstract string AdminEmail { get; set; }
        [Length(1, 64)]
        public abstract string AdminAuthorityGUID { get; set; }
        [Length(1, 2)]
        public abstract string AdminGroupKey { get; set; }



        public abstract AdminInfo Init(string AdminGUID, string AdminLoginName, string AdminPassword, string AdminName, string AdminEmail, string AdminGroupKey, string AdminAuthorityGUID);

        public static AdminInfo GetAdminInfo(Guid AdminGUID)
        {
            return FindOne(p => p.AdminGUID == AdminGUID.ToString());
        }

        public static AdminInfo GetAdminInfo(string AdminLoginName)
        {
            return FindOne(p => p.AdminLoginName == AdminLoginName);
        }

    }
}

在Global.asax的Application_Start(object sender, EventArgs e)中添加了

if (AdminInfo.GetCount(WhereCondition.EmptyCondition) == 0)
            {
                AdminInfo.New.Init(Guid.NewGuid().ToString(), "admin", DESEncrypt.Encrypt("admin"), "管理员", "webmaster@webmaster.com", "S", Guid.NewGuid().ToString()).Save();
            }

            
if (TemplateFileInfo.GetCount(WhereCondition.EmptyCondition) == 0)
            {

                TemplateFileInfo.New.Init(sTemplatePackageGUID, new Guid().ToString(), 1, "��ҳ", "��վ��ҳ", "Default.html", "").Save();
            }

编译的时候没有提示任何错误,但启动系统后出现:

“/”应用程序中的服务器错误。

未将对象引用设置到对象的实例。

说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。

源错误: 

行 36:             }
行 37: 
行 38:             if (TemplateFileInfo.GetCount(WhereCondition.EmptyCondition) == 0)
行 39:             {
行 40: 


源文件: I:\QuickCourse\QuickCourse\QuickCourse\Global.asax.cs    行: 38 

堆栈跟踪: 

[NullReferenceException: 未将对象引用设置到对象的实例。]
   Lephone.Data.Common.<>c__DisplayClass10.<ImplInitialize>b__f(ILBuilder il) +416
   Lephone.Data.Common.<>c__DisplayClassd.<DefineMethod>b__c(ILBuilder il) +56
   Lephone.Data.Common.MemoryTypeBuilder.DefineMethodDirect(MethodAttributes flag, String MethodName, Type returnType, Type[] paramTypes, EmitCode emitCode) +133
   Lephone.Data.Common.MemoryTypeBuilder.DefineMethod(MethodAttributes flag, String MethodName, Type returnType, Type[] paramTypes, EmitCode emitCode) +126
   Lephone.Data.Common.MemoryTypeBuilder.OverrideMethod(MethodAttributes flag, String MethodName, Type OriginType, Type returnType, Type[] paramTypes, EmitCode emitCode) +59
   Lephone.Data.Common.MemoryTypeBuilder.ImplInitialize(Type type, MethodInfo info) +385
   Lephone.Data.DynamicObject.GetImplType(Type sourceType) +1656
   Lephone.Data.Common.ObjectInfo.GetInstance(Type dbObjectType) +134
   Lephone.Data.DbContext.TryCreateTable(Type dbObjectType) +102
   Lephone.Data.DbContext.GetResultCount(Type dbObjectType, WhereCondition iwc, Boolean isDistinct) +52
   Lephone.Data.DbContext.GetResultCount(Type dbObjectType, WhereCondition iwc) +42
   Lephone.Data.QuerySyntax.QueryContent`1.GetCount() +94
   Lephone.Data.Definition.DbObjectModelBase`2.GetCount(WhereCondition con) +238
   QuickCourse.Global.Application_Start(Object sender, EventArgs e) in I:\QuickCourse\QuickCourse\QuickCourse\Global.asax.cs:38



版本信息: Microsoft .NET Framework 版本:2.0.50727.3615; ASP.NET 版本:2.0.50727.3618

查看数据库当中:AdminInfo表能成功创建,但TemplateFileInfo却不能。是为什么呢?

Coordinator
Dec 7, 2010 at 5:24 AM

因为你的 TemplateFileInfo 类的 Init 函数的第一个参数,拼写有错误。

Dec 8, 2010 at 1:33 AM

谢谢~,我疏忽了~

另外,我想DBEntry.NET当中有没有根据DbTable对象或者DataSet 生成 相应数据库表,并且可以采用Mapping方式来操作的方法呢?

例如在程序动态地创建了表,并且定义了表字段,如何将这个表通过DBEntry.NET保存到数据库当中,并且生成动态的映射。

就像类似下面的方式:

DataTable dt = new DataTable();
dt.Columns.Add("Sex", DbType.Int32);
dt.Columns.Add("NAME", DbType.String);
Lephone.Data.DbEntry.Insert(dt,"TableName");
var o = Lephone.Data.DbEntry.From("Table");
var r = o.FindByID(1);
r.Sex = 0;
r.NAME = "Jim";
r.Save();

 

Coordinator
Dec 8, 2010 at 1:46 AM
Edited Dec 8, 2010 at 3:30 AM

不支持通过动态对象创建表、更新数据等。

但是支持使用dynamic类型进行查询。