⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dataobject.cs

📁 smark.data是基于C#开发的轻量级数据访问组件。 提供以下功能封: 1)提供了跨数据库类型操作能力 2)基于程线存储的数据访问上下文对象
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.Text;

namespace Smark.Data.Mappings
{
    [Serializable]
    public class DataObject:EntityBase
    {
        protected override void OnLoadData(System.Data.IDataReader reader)
        {
            ObjectMapper om = ObjectMapper.GetOM(this.GetType());
            om.ReaderToObject(reader, this);
        }
        public void Delete()
        {
             ObjectMapper om = ObjectMapper.GetOM(this.GetType());
             using (IConnectinContext cc = om.Connection.GetContext())
             {
                 Delete(cc);
             }
        }
        public void Delete(IConnectinContext cc)
        {
            ObjectMapper om = ObjectMapper.GetOM(this.GetType());
            if (om.ID == null)
                throw new SmarkException("不存在ID映射描述!");
            OnDeleteObject(cc, om.Table, om.ID.ColumnName,
                om.ID.Handler.Get(this));
        }
        public void Save()
        {
            ObjectMapper om = ObjectMapper.GetOM(this.GetType());
            using (IConnectinContext cc = om.Connection.GetContext())
            {
                Save(cc);
            }
        }
        public void Save(IConnectinContext cc)
        {
            if (EntityState._FieldState.Count == 0)
                return;
            ObjectMapper om = ObjectMapper.GetOM(this.GetType());
            cc.BeginTransaction();
            if (EntityState._Loaded)
            {
                EditData(cc,om);
            }
            else
            {
                NewData(cc, om);
            }
            cc.Commit();
        }
        private void EditData(IConnectinContext cc,ObjectMapper om)
        {
            if (om.ID == null)
                throw new SmarkException("不存在ID映射信息,不能进行数据更新操作!");
            Update update = new Update(om.Table);
            foreach (PropertyMapper pm in om.Properties)
            {
                if (EntityState._FieldState.ContainsKey(pm.Handler.Property.Name))
                {
                    if (pm.Cast != null)
                    {
                        update.AddField(pm.ColumnName,pm.Cast.ToColumn(pm.Handler.Get(this),
                            pm.Handler.Property.PropertyType));
                    }
                    else
                    {
                        update.AddField(pm.ColumnName, pm.Handler.Get(this));
                    }
                }
            }
            update.Where.SqlText.Append(om.ID.ColumnName + "=@p1");
            update.Where.Parameters.Add(new Command.Parameter { Name = "p1", Value = om.ID.Handler.Get(this) });
            update.Execute(cc);
            
        }
        private void NewData(IConnectinContext cc, ObjectMapper om)
        {
            Insert insert = new Insert(om.Table);
            if (om.ID != null)
            {
                if (om.ID.Value != null)
                {
                    if (!om.ID.Value.AfterByUpdate)
                    {
                        om.ID.Value.Executing(cc, this, om.ID,om.Table);
                        insert.AddField(om.ID.ColumnName, om.ID.Handler.Get(this));
                    }
                }
                else
                {
                    insert.AddField(om.ID.ColumnName, om.ID.Handler.Get(this));
                }
            }
            foreach (PropertyMapper pm in om.Properties)
            {
                if (EntityState._FieldState.ContainsKey(pm.Handler.Property.Name))
                {
                    if (pm.Cast != null)
                    {

                        insert.AddField(pm.ColumnName,pm.Cast.ToColumn(pm.Handler.Get(this),pm.Handler.Property.PropertyType));
                    }
                    else
                    {
                        insert.AddField(pm.ColumnName, pm.Handler.Get(this));
                    }
                }
            }
            insert.Execute(cc);
            if (om.ID != null && om.ID.Value != null && om.ID.Value.AfterByUpdate)
                om.ID.Value.Executed(cc, this, om.ID,om.Table);
        }
      
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -