Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
.NET ÒµÎñ¿ò¼Ü¿ª·¢ÊµÕ½
 
×÷ÕߣºÐ¡Ñó£¨ÑàÑóÌ죩 À´Ô´£º²©¿ÍÔ° ·¢²¼ÓÚ£º2014-12-26
  2055  次浏览      27
 

ǰÑÔ£ºÆäʵÕâ¸öϵÁл¹ÊÇ֮ǰµÄ".NET ·Ö²¼Ê½¼Ü¹¹¿ª·¢ÊµÕ½ ",Ö®ËùÒÔ¸ÄÁËÃû×Ö£¬Ö÷ÒªÊÇÒòΪÎÄÕµıêÌâ´øÀ´Á˲»ÉÙµÄÆçÒ壺ϵÁÐÎÄÕÂÖб¾´òË㿪·¢Ò»¸ö¼ò»¯ÒµÎñ·¢µÄÁ÷³ÌµÄFramework,È»ºóÓÃÕâ¸öFrameworkÔÙÀ´ÊµÕ½£¬¿ª·¢Ò»¸ö·Ö²¼Ê½µÄÓ¦Ó᣸ÄÁËÃû×Ö¡£¸ø´ó¼Ò´øÀ´Á˲»±ã£¬¾´Çë¼ûÁ¡£

DALµÄÖØ¹¹

֮ǰÔÚ¿ª·¢DALÖУ¬Ìá³öÁËһЩ˼Ï룬ҲÉè¼ÆÁËһЩ½Ó¿Ú¡£ÏÖÔھͰÑDALµÄһЩÉè¼ÆÍêÉÆÆðÀ´¡£ËµÊÇ¡°ÍêÉÆ¡±£¬²¢²»ÊÇ˵°ÑËùÓеĴúÂ붼ʵÏÖ£¬¶øÊǰѸö¨ÒåµÄ½Ó¿Ú£¬·½·¨Çö¨ÏÂÀ´¡£RichardÈÏΪ£¬Éè¼ÆÒ»¸ö¼Ü¹¹»òÕßFrameworkµÄʱºò£¬¿ªÊ¼Êǽӿڵ͍Ò壬¶¨ÒåºÃ¸÷²ãÖ®¼ä½»»¥µÄ½Ó¿Ú£¬È»ºó²ÅÊǾßÌå´úÂëµÄʵÏÖ¡£

ÒòΪÔÚÉè¼ÆFrameworkµÄʱºò£¬Ê×ÏÈÒª¿¼ÂÇÕâ¸öFrameworkµÄʹÓÃÕßÊÇË­£¬Ï£ÍûËûÃÇÔõôÑùÀ´Ê¹Óÿª·¢³öÀ´µÄÕâ¸öFramework¡£ÔÚÕâÀRichardºÜÃ÷°×£ºFrameworkµÄʹÓÃÕß¾ÍÊÇ×Ô¼º¹«Ë¾ÀïµÄ¿ª·¢ÈËÔ±¡£¶øÇÒ»¹ÒªÊ¹µÃ¿ª·¢µÄʹÓþ¡Á¿µÄ·½±ã£¬²»Òªµ½´¦È¥ÅäÖÃһЩÎĵµ£¬×îºÃ¾ÍÊǰÑFrameworkÒýÈë½øÀ´£¬ÉÔ΢ÅäһϾÍʹÓá£

ÔÚRichardÉè¼ÆµÄFrameworkÖУ¬¾ÍDAL¶øÑÔ£¬Èç¹ûÏ£ÍûDAL·µ»ØDataTable,DataReaderµÈ¸øBLL£¬ÄÇôÐèÒªÅäÖõĽö½öÖ»ÊÇÖ¸Ã÷Êý¾Ý¿âµÄÁ¬½Ó×Ö·û´®£»Èç¹ûÏ£ÍûDAL·µ»ØµÄÊý¾ÝʵÌ司BLL,ÄÇô¾ÍµÃ°ÑÒ»ÕÅÕŵıíÓ³Éä³ÉΪʵÌ壬ȻºóÈÃÕâЩʵÌå¼Ì³ÐIDataEntity½Ó¿Ú¾ÍÐÐÁË(Éú³ÉʵÌå¿ÉÒÔÓÃORM¹¤¾ß£¬»òÕß×Ô¼ºÊÖд´úÂë)¡£

Richard˼¿¼ÁË֮ǰ¶ÔDALµÄÉè¼Æ£¬ÔÚ´ËËû×öÁËһЩ¸Ä½ø¡£

Ê×ÏȾÍÊǶÔÓÚIDataContextµÄÖØÐÂÉè¼ÆºÍÀí½â£ºÖ®Ç°µÄÉè¼ÆÊǶ¨ÒåÁËIDataContext,È»ºóÓò»Í¬µÄ·½Ê½ÊµÏÖÕâ¸ö½Ó¿Ú£¬ÈçLinqDataContext.Provider¾ÍÊÇÓÃLinqµÄ·½·¨À´·µ»Ø½á¹û(DataResult)¡£ÏÖÔÚRichardÈÏΪIDataContextÆäʵ¾ÍÊÇÓÃÀ´²Ù×÷Êý¾Ý¿âµÄ£¬ËùÒÔ·µ»ØµÄ½á¹û¾ÍÓ¦¸ÃÊDzÙ×÷Êý¾ÝÖ®ºóµÄ½á¹û£¬ÈçUpdate²Ù×÷¾Í·µ»ØÊÜÓ°ÏìµÄÐÐÊý»òÕßÊÇ·ñ¸üгɹ¦¡£ÖÁÓÚÊÇ·ñÒª°ÑһЩ¶îÍâµÄÐÅÏ¢°ü×°·µ»Ø¸øBLL£¬¾Í²»ÊÇIDataContextµÄʵÏÖÕßµÄÊÂÇéÁË¡£¶øÇÒRichard»¹¿¼Âǵ½ÁËÐèÒªÔÚÒ»¶¨³Ì¶ÈÉÏÖ§³ÖÔ­ÉúµÄADO.NET£¬ÆðÂë¸øADO.NETÔ¤Áô½Ó¿Ú¡£

»ùÓÚ´Ë£¬Richard¾Í°ÑIDataContext¶¨ÒåΪһ¸ö½Ó¿ÚÉùÃ÷£¬È»ºóÔÙ¶¨ÒåÁËIDataEntityContext£¬ºÍIDataTableContextÀ´¼Ì³ÐIDataContext,ËûÃǵĹØÏµÍ¼ÈçÏ£º

ÆäÖÐIDataEntityContextʹÓÃLinqºÍEntity FrameworkÀ´ÊµÏÖ£¬¶øIDataTableContext¾ÍÊÇÓÃADO.NETµÄ·½Ê½À´ÊµÏÖ¡£

IDataEntityContext½Ó¿ÚµÄºÍϵÁÐÎÄÕÂÖж¨ÒåµÄһЩ·½·¨²î²»¶à£¬µ«ÊÇ×öÁËÐ޸ġ£ÆäÖÐÓÐÒ»µãÒªÌáµÄ¾ÍÊÇ£ºICriteria¾ÍÊÇËùÓÐÌõ¼þ¶ÔÏóҪʵÏֵĽӿÚ(²éѯ¶ÔÏóÒ²ÊÇÌõ¼þ¶ÔÏóµÄÒ»ÖÖ)¡£ÀýÈ磬¿ÉÒÔ¸ù¾ÝÏàÓ¦µÄÌõ¼þɾ³ý£¬¸üÐÂÊý¾Ý¡£

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> /// <summary>
/// ËùÓеÄÊý¾ÝʵÌåÖ´ÐÐÕßʵÏÖÕâ¸ö½è¿Ú
/// </summary>
public interface IDataEntityContext:IDataContext
{
TEntity Add<TEntity>(TEntity entity) where TEntity : IDataEntity;
List<TEntity> Add<TEntity>(List<TEntity> entityList) where TEntity : IDataEntity;

bool Update<TEntity>(TEntity entity) where TEntity : IDataEntity;
bool Update<TEntity>(List<TEntity> entityList) where TEntity : IDataEntity;
bool Update(ICriteria condiftion, object value);

bool Delete<TEntity>(TEntity entity) where TEntity : IDataEntity;
bool Delete<TEntity>(List<TEntity> entityList) where TEntity : IDataEntity;
bool Delete(ICriteria condition);

int GetCount(ICriteria condition);
List<TEntity> Query<TEntity>(ICriteria condition);
List<TEntity> Query<TEntity>(ICriteria condition, int pageIndex, int pageSize, ref int entityCount) where TEntity : IDataEntity;
List<object> Query(ICriteria condiftion);
}

ÁíÍâ¾ÍÊǶàÁËÒ»¸ö List<object> Query(ICriteria condiftion);·½·¨£¬Ö®ËùÒÔÓÐÕâ¸ö·½·¨£¬Richard¿¼Âǵ½£¬¿ÉÄÜ¿ª·¢ÈËÔ±ÏëÒªÖ±½Ó×Ô¼ºÐ´SQLÓï¾äÈ¥Ö´ÐУ¬Èçselect avg(Count),sum(Name) from Customer...£¬¿ª·¢ÈËÔ±¿ÉÒÔдÈÎÒâµÄÓï¾ä£¬ËùÒÔ·µ»ØÒ»¸öʵÌåÀ಻ÏÖʵ£¬¾Í·µ»ØÒ»¸öList<object>¡£

»¹ÓÐÒ»µã¾ÍÊǹØÓÚ²éѯ¶ÔÏóµÄ¸Ä½ø£ºÒÔǰ½ö½öÖ»ÊǶ¨ÒåÁ˲éѯ¶ÔÏóµÄ½Ó¿Ú£¬ÏÖÔÚÓÃICriteria ½Ó¿ÚÖж¨ÒåÀ´Ìõ¼þ¶ÔÏ󣬶øÇÒ»¹¿ÉÒÔÔÚÌõ¼þ¶ÔÏóÉùÃ÷ÊÇÔÚ¶ÔÊý¾Ý²Ù×÷ÊÇ·ñ²ÉÓÃÊÂÎñ»òÕß»º´æ¡£

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> /// 
    /// ËùÓеÄÌõ¼þ¶ÔÏó¶¼Òª´ÓÕâ¸ö½Ó¿Ú¼Ì³Ð
    /// 
    public interface ICriteria
    {
        string Name { get; set; }
        bool IsCache { get; set; }
        bool IsTransaction { get; set; }
    }

Ö®ºóRichardÓÖ¶¨ÒåÁËÒ»¸öIDataProvider£¬½Ó¿Ú£¬ÉùÃ÷ÈçÏ £º

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> /// <summary>/// Êý¾ÝÌṩÕßҪʵÏֵĽè¿Ú/// </summary>public interface IDataProvider{DataResult<TEntity> Add<TEntity>(TEntity entity) where TEntity : IDataEntity;DataResult<TEntity> Add<TEntity>(List<TEntity> entityList) where TEntity : IDataEntity;

DataResult<TEntity> Update<TEntity>(TEntity entity) where TEntity : IDataEntity;DataResult<TEntity> Update<TEntity>(List<TEntity> entityList) where TEntity : IDataEntity;bool Update(ICriteria condiftion, object value);

DataResult<TEntity> Delete<TEntity>(TEntity entity) where TEntity : IDataEntity;DataResult<TEntity> Delete<TEntity>(List<TEntity> entityList) where TEntity : IDataEntity;bool Delete(ICriteria condiftion);

int GetCount(ICriteria condition);

DataResult<TEntity> GetOne<TEntity>(ICriteria condition) where TEntity : IDataEntity;DataResult<TEntity> GetList<TEntity>(ICriteria condition) where TEntity : IDataEntity;DataResult<TEntity> GetPageData<TEntity>(ICriteria condition, int pageIndex, int pageSize, ref int entityCount) where TEntity : IDataEntity;List<object> GetCustomData(ICriteria condiftion);}

Ö®ËùÒÔÒª¶¨ÒåÕâ¸ö½Ó¿Ú£¬Æäʵ Richard¾ÍÊÇÏëÈÃʵÏÖÁËIDataContextµÄÀà̤̤ʵʵµÄÈ¥×öµ×²ãµÄÊý¾Ý²Ù×÷£¬ÖÁÓÚÊý¾Ý²Ù×÷Ö®ºóµÄ½á¹ûÒÔʲôÐÎʽ¸øBLL£¬²»ÓÃIDataContextµÄʵÏÖÕßÀ´¹ØÐÄ£¬¶øÊÇÓÃIDataProviderµÄʵÏÖÕßÀ´¹ØÐÄ¡£

ÔÚIDataProviderµÄʵÏÖÕßÔڵײã¾ÍÊǵ÷ÓÃÁËIDataContextµÄʵÏÖÕߵķ½·¨£¬È»ºóÔÚIDataProviderÖУ¬¶ÔÍâÌṩÁËһЩ¸ü¼ÓÓѺúͷ½±ãʹÓõķ½·¨£¬×îºóÔÚBLLÖÐÖ±½ÓÒÀÀµµÄ¾ÍÊÇIDataProvider£¬¶ø²»ÊÇIDataContext¡£

ÁíÍ⣬¶ÔÓÚIDataProvider·µ»ØµÄDataResultÒ²×öÁËһЩÐ޸ģºÈç¹û·µ»ØµÄÊÇÊý¾ÝʵÌ壬¼´ ʹÓõÄÊÇIDataEntityContextÀ´Ìṩµ×²ãµÄÊý¾Ý²Ù×÷£¬ÄÇôDataResult<TEntity>ÊÇûÓÐÎÊÌâµÄ£»µ«ÊÇÈç¹ûʹÓõÄÊÇIDataTableContext£¬ÄÇô·µ»ØDataResult<TEntity>¾Í²»ÐÐÁË£¬ÒòΪIDataTableContext²éѯ·½·¨¿ÉÄÜ·µ»ØµÄDataTable,»òÕßDataReader.ËùÒÔ£¬ÔÚÉè¼ÆÖÐÒ¶Ô¤ÁôÁËÒ»¸ö½Ó¿Ú£ºÈÃIDataProvider·µ»ØµÄ½á¹ûʵÏÖIDataResult½Ó¿Ú£¬ÄÇôataResult<TEntity>¼Ì³ÐÕâ¸ö½Ó¿Ú£¬Ö÷ÒªÓÃÀ´·µ»ØÊý¾ÝʵÌ壬ÈçÏ£º

ÒµÎñ²ã³õ²½¹¹Ïë

ǰÑÔ£º±¾ÆªÖ÷Òª½²ÊöÈçºÎ°ÑDALºÍBLLÏÎ½ÓÆðÀ´¡£

DALµÄÉè¼Æ¾Íµ½ÕâÀÏÂһƪÎÄÕ¾ͿªÊ¼½²Êö¶ÔÒµÎñ²ãµÄһЩ˼¿¼¡£

1. DALºÍBLL֮ǰµÄMapping

Ê×ÏÈ£¬ÒµÎñÀàºÍÊý¾ÝʵÌåÀ಻ÊÇÒ» Ò»¶ÔÓ¦µÄ¹ØÏµ£¬»»¾ä»°Ëµ£¬²»ÊÇÒ»¸öÒµÎñÀà¾ÍÒ»¶¨¶ÔÓ¦Êý¾Ý¿âÖеÄÒ»ÕÅ±í¡£ÒµÎñÀàÊÇÓÃÖ»ÊÇʹÓÃÊý¾ÝʵÌåÖеÄÊý¾Ý¶øÒÑ£¬ËùÒÔÒ»¸öÒµÎñÀàÖеÄÊý¾ÝÍùÍùÀ´×Ô¶à¸öÊý¾ÝʵÌå¡£

ÿ¸öÒµÎñÀà¶¼ÊÇÓÐ×Ô¼ºµÄһЩÊôÐԵ쬰ÑÊý¾ÝÒÔÊý¾ÝʵÌå»òÕßDataTableµÄÐÎʽ´ÓDAL»ñȡ֮ºó£¬BLLÀà¾ÍʹÓÃÕâЩÊý¾Ý£¬BLL²»»á°ÑÕâЩԭÉúµÄÊý¾ÝʵÌ屩¶¸øUI¡£BLLÀà»á°ÑUIÖÐÒªÊÇÓõÄÊý¾Ý×°Èëµ½×Ô¼ºµÄÊôÐÔÖС£

ËùÒÔÔÚÕâ¸ö¹ý³ÌÖоÍÓÐÒ»¸ö¸³ÖµµÄ¹ý³Ì£¬»òÕß³ÆÎªmappingÓ³Éä¡£µ±RichardÌá³öÕâ¸öÏë·¨ºó£¬ÏîÄ¿×éµÄͬʾÍÎÊËû£ºÎªÊ²Ã´Òª×öµÄÕâô¸´ÔÓ£¬»¹ÒªÒ» Ò» µÄ¸³Öµ£¬ÎªÊ²Ã´²»Ö±½Ó°ÑÊý¾ÝʵÌ司UIʹÓã¬ÎªÊ²Ã´Ò»¶¨ÒªÔÚÖмäÕâôתһÏÂÄØ£¿

Richard·ÖÎöÁËһЩԭÒò£º

1. Èç¹ûÖ±½Ó°ÑÊý¾ÝʵÌ司ÁËUI£¬ÄÇôUIÄǶ˾ͺÜÇå³þDALÁË£¬ÒÔºóÊý¾Ý·ÃÎÊ·½Ê½´ÓADO.NET µ½ÁËEF£¬ÄÇôUI ¾Í¶¯ÁË£¬Óֻص½ÒÔǰÁË¡£

2. ÔÚBLLÖпÉÒÔ¶Ô´ÓDALÈ¡³öÀ´µÄÊý¾Ý½øÐÐһЩ´¦Àí£¬Èçת»»¸ñʽ£¬¼ÆË㣬×éºÏµÈ¡£

RichardÏëµ½°ÑBLLºÍDAL³¹µ×µÄ½âñҵÎñÀàÖв»´æÔÚÊý¾ÝʵÌåÀàµÄÒýÓá£ÕâÑùÉè¼ÆÖ®ºóÁé»îÐԾͺܴóÁË¡£×îºó´ïµ½µÄЧ¹û¾ÍÊÇ£ºÍ¨¹ýÅäÖã¬ÅäÖÃÒµÎñÀàÿ¸öÊôÐÔµÄÊý¾ÝµÄÀ´Ô´¡£¶øÕâ¸öÒµÎñÀàÍêÈ«²»ÖªµÀÕâЩÊý¾Ýµ½µ×À´Ô´ÓÚÄĸö»òÕßÄÄЩÊý¾ÝʵÌå¡£

ÕâÑùȷʵºÜÁé»î£¬RichardÐ˷ܲ»ÒÑ¡£

2. ÈçºÎMapping

³õ²½Ï뷨ͨ¹ýÅäÖÃÎļþ¡£ÈçÏÖÔÚÓÐÒ»¸öProductµÄÒµÎñÀ࣬¶¨ÒåÈçÏ£º


Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/-->    public class ProductBL
    {

        public string ProductName { get; set; }

        public decimal Price { get; set; }

        public string Description { get; set; }        

    }

ÄÇôÈçºÎ¸øÕâЩÊôÐÔ¸³Öµ£¬Í¬Ê±Ò²²»ÒýÓÃÊý¾ÝʵÌå¡£RichardÓÃÅäÖÃÎļþÀ´ÊµÏֵģ¬ÕâÀïRichard¾ÍÔ¼¶¨ÁË£ºÅäÖÃÎļþµÄÃû×Ö¾ÍÊÇ¡°ÒµÎñÀàµÄÃû×Ö¡±+¡°Mapping.xml¡±.ËùÒÔProductµÄÅäÖÃÎļþ¾ÍÊÇProductBLMapping.xml

<?xml version="1.0" encoding="utf-8" ?><BusinessModel name="ProductBL" mappingTo="DAL.ProductEntity" >
<property name="ProductName" mappingTo="Name" type="System.String"/>
<property name="Price" mappingTo="Price" type="System.Decimal"/>
<property name="Description" mappingTo="Description" type="System.String"/></BusinessModel>

È»ºóÔÙÔËÐеÄʱºò¾Íͨ¹ý·´ÉäÀ´¸³Öµ¡£

ÏÖÔÚÎÊÌâÓÖÀ´ÁË£º

1. ÿ´Î¶¼ÊÇͨ¹ý·´ÉäÀ´¸³Öµ£¬ÐÔÄܺܳÉÎÊÌâ¡£

2. Èç¹ûÅäÖÃÎļþ³ö´í£¬µ÷ÊԺܲ»·½±ã¡£

3. ÈçºÎ´¦ÀíÒ»¸öÒµÎñÀà¶ÔÓ¦¶Ô¸öÊý¾ÝʵÌåµÄÇé¿ö£¬È磺

´úÂë

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/-->    public class ProductBL
    {
        public string ProductName { get; set; }
        public decimal Price { get; set; }
        public string Description { get; set; }

        //À´×ÔCustomDAL
        public string CustomerName { get; set; }

    }

µ«ÊǺô¦ºÜÃ÷ÏÔ£º

1. DALºÍBLL½âñî

2. ºÜ±ãÓÚ²éѯ¶ÔÏóµÄʵÏÖ¡£ÀýÈ磺ÔÚUI´úÂëд£º

ICriteria condition=CriteriaFactory.Create(typeof(ProductBL).Where("ProductName",  Operation.Equal,"book");

µ±È»ProductNameÊÇÒµÎñÀàProductBLµÄÊôÐÔ£¬ÔÚ²éѯ¶ÔÏó×îºó½âÎöΪSQLÓï¾äµÄʱºò¾Í¿ÉÒÔÀûÓÃProductBLMapping.xmlÀ´Éú³ÉSQL¡£

£¨×¢£ºÐ¡ÑóÇë´ó¼ÒÏëÏ룬ÉÏÃæµÄ˼ÏëÀ´×ÔÓÚ.NETÖÐÄĸö¿ªÔ´¿ò¼Ü£¿£©

¶ÔÓÚÐÔÄÜ·½Ã棬Richard³¢ÊÔÕâÑù½â¾ö£º

ÔÚµÚÒ»´ÎMappingµÄʱºò£¬¾Í°ÑÕâЩmappingµÄÐÅÏ¢±£´æÔÚ¾²Ì¬×ÖµäÖУ¬Ï´ÎÔÚmappingµÄʱºò£¬¾Í²»ÓÃÔÙ¶ÁÅäÖÃÎļþÁË£¬¶øÇÒ¶ÁÄÚ´æÖеÄ×ֵ䡣

µ«ÊÇÕâÑù£¬Ëæ×ÅÒµÎñÀàµÄÔö¼Ó£¬ÄÚ´æÊ¹ÓÃÒ²¼Ó´ó£¬¶øÇÒ¸³Öµ·½Ê½»¹ÊÇ·´Éä¡£

3. Ôٴι¹Ë¼

Richard½Ó×Å¿¼ÂÇ£ºÈçºÎ´¦ÀíÒ»¸öÒµÎñÀà¶ÔÓ¦¶Ô¸öÊý¾ÝʵÌåµÄÇé¿ö£¿ÓÚÊÇÅäÖÃÎļþ¾Í¸ÄΪÁË£º

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><?xml version="1.0" encoding="utf-8" ?><BusinessModel name="ProductBL" ><property name="ProductName" mappingTo="DAL.ProductEntityName" type="System.String"/><property name="Price" mappingTo="DAL.ProductEntityPrice" type="System.Decimal"/><property name="Description" mappingTo="DAL.ProductEntityDescription" type="System.String"/><property name="CustomerName" mappingTo="DAL.CustomerEntity.Name" type="System.String"/> </BusinessModel>

»ù±¾µÄÎÊÌâËãÊǽâ¾öÁË£¬µ«ÊÇÐÔÄܵÄÎÊÌâÒÀÈ»´æÔÚ¡£

RichardÓÖ¿ªÊ¼¿¼ÂǸü¼ÓºÃµÄ·½Ê½¡£

ÒµÎñ²ãMappingµÄÑ¡Ôñ²ßÂÔ

ǰÑÔ£ºÔÚÉÏһƪÎÄÕÂÖÐÌáµ½ÁËmapping£¬¸Ð¾õºÜÏñÔÚÖØÐÂʵÏÖNHibernate¡£ÆäʵÎÄÕµı¾ÒâÊÇÏë·´Ó³³öRichardÔÚ˼¿¼µÄʱºòµÄһЩѡÔñ£ºÀûÓÃÏÖÓе쬻¹ÊÇ×îºó×Ô¼ºÓñðµÄ·½Ê½ÊµÏÖ¡£Èç¹ûÒ»ÉÏÀ´¾Í˵ʲôʲôºÃ£¬ÄÇÌ«Îä¶ÏÁË£¬Ò²ºÜÆ¬Ãæ£¬ÏµÁÐÎÄÕ·´¸´µÄÔÚÇ¿µ÷Ò»µã£º¼¼ÊõÓÐËüµÄÊÊÓó¡¾°£¬Ã»ÓÐÍêÃÀµÄ¼¼Êõ¡£ºÜ¶àµÄÅóÓÑ˵±¾ÏµÁÐÔÚ½üËÆµÄ¿ª·¢Ò»¸öORM£¬Æäʵ²»ÊÇ£ºORM¾ÍÊǰÑÊý¾Ý¿â±íתΪÊý¾ÝʵÌ壬µ«ÊDZ¾ÆªÖÐÊÇʹÓÃÒѾ­×ª»»ºóµÄÊý¾ÝʵÌå¡£ÊǰÑÊý¾ÝʵÌåµÄÊý¾Ý¸øÒµÎñÀà¡£

¿ªÊ¼Ö®Ç°Ï£ÍûÔÚÕâÏÂÃæµÄÁ½µãÉÏ´ïµ½¹²Ê¶£º

1. ×îºÃ²»Òª°ÑDALµÄÊý¾ÝʵÌ壨Linq»òÕßEntity FrameworkÉú³ÉµÄ£©£¬»òÕßÔ­ÉúµÄDataTable±©Â¶¸øUIÄDZߣ¨³ý·ÇÒ»¶¨Òª£¬»òÕßÓÐÌØÊâµÄÔ­Òò£©¡£

2. UIʹÓõÄÊÇBLLÀࣨ»òÕß»ùÓÚÏûÏ¢µÄScheme¸ñʽ£©¡£

¶øÇÒ±¾ÆªÌÖÂÛÒµÎñÀàÖеÄmapping£¬Ò²¾ÍÊÇÊý¾ÝµÄ»ñÈ¡·½Ê½£¬µ±È»£¬ÒµÎñÀàµÄÉè¼ÆÔ¶Ô¶²»Ö¹ÕâЩ¡£

Richard˼¿¼ÁËÅäÖÃÎļþµÄ·½Ê½£¬³ÏÈ»ÓÃÅäÖÃÎļþȷʵÁé»î£¬µ«ÊÇÁé»îÒ²ÊÇÓдú¼ÛµÄ£¬ÒòΪFramework×îºó»¹µÃ¹«Ë¾µÄ¿ª·¢ÈËԱʹÓ㬹ý¶àµÄÅäÖú͹ý¸ßµÄѧϰ³É±¾Ê¹µÃFrameworkʧȥÁ˺ܴóµÄÒâÒå¡£

Richard¿ªÊ¼Ë¼¿¼ÁË£¬Ïëµ½ÁË»¹ÓÐÒ»ÖÖ×î¼òµ¥µÄmappingµÄ·½Ê½£º¾ÍÊÇÖ±½ÓÒ»¸ö¸öµÄ¸³Öµ£¬È磺

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/-->       public class ProductBL
       {
         public string ProductName { get; set; }
         public decimal Price { get; set; }
         public string Description { get; set; }

         public void Mapping(m_Product productEntity)
         {
            this.ProductName = productEntity.Name;
            this.Price = productEntity.Price;
            this.Description = productEntity.Description;
         }
        }

ºÜÃ÷ÏÔ£¬Õâ¸ö¹ý³ÌºÜ¼òµ¥È´ºÜ·±Ëö¡£

ºÍ֮ǰʹÓÃÅäÖÃÎļþµÄ·½Ê½Ïà±È£º

Óŵ㣺

1. ±ãÓÚʹÓúÍÀí½â

2. ±ãÓÚµ÷ÊÔ

ȱµã£º

1. ºÍÊý¾ÝʵÌåñîºÏµÄºÜ½ô(ÆäʵÕâ²»ËãÊÇȱµã£¬ÕâÊǺÍ֮ǰÅäÖÃÎļþµÄ·½Ê½±È½Ï¶øÑÔÈÏΪȱµã)¡£ÉÏÃæµÄ´úÂëÖоÍÖ±½ÓʹÓÃÁËm_Product.£¨´ó¼Ò¿ÉÒԲο´Ö®Ç°Ò»ÆªÎÄÕÂÖÐÓÃÅäÖÃÎļþµÄÓÅȱµã£©

2. ±àдµÄ¹ý³ÌºÜ·±Ëö¡£È«²¿ÊÇÊÖ¶¯µÄmapping¡£

¶øÇÒ»¹ÓйؼüµÄÒ»µã¾ÍÊÇ£º²éѯ¶ÔÏóÔõôÉú³É×îÖÕµÄSQLÓï¾ä£¿

ÀýÈ磬ÏÂÃæµÄ´úÂ룺

ICriteria condition=CriteriaFactory.Create(typeof(ProductBL).Where("ProductName", Operation.Equal,"book");

Èç¹û²ÉÓÃÅäÖÃÎļþµÄmapping·½Ê½£¬ºÜÇå³þ£ºÔÚÅäÖÃÎļþÖÐProductBLµÄProductName¶ÔÓ¦m_ProductʵÌåµÄName×ֶΣ¬Ò²¾ÍÊǶÔÓ¦Êý¾Ý¿â±ím_ProductµÄName×ֶΣ¨ÒòΪÔÚBLLÖÐʹÓõÄÊÇͨ¹ýlinq»òÕßEntity FrameworkÉú³ÉµÄm_ProductʵÌ壩¡£ÉÏÃæµÄ²éѯ¶ÔÏó×îºóÉú³ÉÀàËÆselect * from m_Product where Name=¡¯book¡¯µÄÓï¾ä¡£

RichardÏëµ½NHibernateµÄʵÏÖ£ºÔÚNHibernateÒ²Óвéѯ¶ÔÏó£¬ÔÚNHibernateÖеIJéѯ¶ÔÏóµÄʵÏÖÒ²ÊÇÒÀÀµNHibernateµÄÄǸömappingµÄÅäÖÃÎļþµÄ¡£

²¢²»ÊÇ˵ûÓвéѯ¶ÔÏó¾Í²»ÐУ¬²»Óòéѯ¶ÔÏó£¬ÓÃLinqºÍEntity FrameworkÒ²ÊÇ¿ÉÒÔʵÏֵġ£µ«ÊÇÊý¾Ý²ã¾ÍûÓС°ÒÔ²»±äÓ¦Íò±ä¡±Á˵ÄЧ¹û£¬¶øÇÒ¿ª·¢ÈËÔ±ÒªÕÆÎÕ¸÷ÖÖµÄÊý¾Ý·ÃÎʼ¼Êõ£ºADO.NET, LinqµÈ¡££¨¿ÉÒԲο´.NET ·Ö²¼Ê½¼Ü¹¹¿ª·¢ÊµÕ½Ö®Èý Êý¾Ý·ÃÎÊÉîÈëÒ»µãµÄ˼¿¼Ò»ÎÄ£©¡£

ÏÖÔÚRichardÃæÁÙµÄÎÊÌâ¾ÍÊÇ£º

1. ²»ÓÃÅäÖÃÎļþmapping£¬ÕâÑù²éѯ¶ÔÏó¾Í²»ºÃʵÏÖ¡£

2. ÊÖ¶¯µÄÇÃÈë´úÂëmapping£¬Öظ´µÄÀͶ¯¡£

Richard˼¿¼ÊÇ·ñ¸üºÃµÄ·½Ê½½â¾öÉÏÃæµÄÎÊÌâ¡£ÓÚÊǵÚÈýÖÖ·½Ê½¾Í²úÉúÁË¡£

3. µÚÈýÖÖMapping·½·¨¡£

µÚÈýÖÖmappingµÄ·½·¨¾ÍÊÇ×ÛºÏÁË֮ǰÁ½ÖÖmappingµÄÓŵ㣬¶ø±Ü¿ªÁËËûÃǵÄȱµã¡£

RichardÏëµ½½â¾öÊÖ¶¯mappingµÄ·½·¨¾ÍÊÇ£ºÍ¼Ðλ¯µÄ´úÂëÉú³ÉÀ´´úÌæÊÖд´úÂë¡£¶øÇÒÒªÏë°ì·¨±£´æÊý¾Ý¿â×ֶεÄһЩÐÅÏ¢¡£

ºÜÇɵľÍÊÇ£ºlinqºÍEFÉú³ÉµÄʵÌåÖеÄ×Ö¶ÎÐÅÏ¢¾Í·´Ó³ÁËÊý¾Ý±í×ֶεÄÐÅÏ¢¡£Õâµã¿ÉÒÔÀûÓÃÆðÀ´¡£ÏÂÃæµÄ²ÝͼÊÇÓÃVisio»­³öµÄ£¬´ú±íÁËRichardµÄÏë·¨¡£ÆäʵRichardҲûÓÐһϾͿª·¢³öÏÂÃæµÄ¹¤¾ß£¬Ò»Çл¹ÊÇ´¦ÓÚÉè¼Æ½×¶Î¡£

RichardÉè¼Æ³öÁË×Ô¶¯Éú³É´úÂëµÄ¹¤¾ß£¨¹¤¾ßµÄ¿ª·¢Richard˼¿¼¹ýÁË£¬¿ÉÒÔ²ÉÓÃ×î¼òµ¥µÄʵÏÖ·½Ê½£ºÒ»¸öWindows³ÌÐò¡£Ò²Ïë¹ýÓÃDSL¹¤¾ß¿ª·¢£¬µ«ÊÇDSLµÃѧϰ¹ý³Ì»¹ÊÇÓе㸴Ôӵģ©¡£

×¢£ºËäȻ˵ÊÇ´úÂëÉú³É¹¤¾ß£¬Æäʵһ¿ªÊ¼RichardÒ²ÊÇÏëµÄºÜ¼òµ¥£º¾ÍÊÇÒ»¸öдÎı¾µÄ²Ù×÷¡£

ÔÚÉÏÃæµÄ½çÃæÖУ¬Ñ¡ÔñÒªºÍÄĸöÊý¾ÝʵÌåÀàmapping£¬¿ÉÒÔͨ¹ýÑ¡Ôñ¡°MappingName¡±À´ÊµÏÖ¡£È»ºóµã»÷¡°Properties¡±°´Å¥£¬³öÏÖÁËÈçϵĽçÃæ£º

ÕâÊÇÒ»¸öרÃÅÓÃÀ´ÅäÖÃmappingµÄ½çÃæ£ºµã»÷¡°Add¡±°´Å¥£¬Ìí¼ÓÒ»¸öÒµÎñÀàµÄÊôÐÔ£¬È»ºóÓá±MappingTo¡±À´ÉèÖÃÕâ¸öÊôÐÔµÄÊý¾Ý´ÓÊý¾ÝʵÌåÀàµÄÄǸö×Ö¶ÎÖлñÈ¡¡£ÔÚÑ¡ÔñÊý¾ÝʵÌå×ֶεÄʱºò£¬Ò²°ÑÕâ¸öÑ¡ÖÐÊý¾ÝʵÌåµÄ×Ö¶ÎÐÅÏ¢±£´æÆðÀ´£¬¹©¸øÖ®ºóµÄ²éѯ¶ÔÏóʹÓá£

»ù±¾Ë¼Â·RichardÒѾ­ÓÐÁË¡£ÏÖÔÚµÄÎÊÌâ¾ÍÊǰÑÉÏÃæÑ¡Ñ¡ÖÐÊý¾Ý×Ö¶ÎÐÅÏ¢±£´æÔÚÄÄÀ¶øÇÒ»¹µÃºÍÒµÎñÀàµÄÊôÐÔ¶ÔÓ¦£¬ÀýÈ磬Id¶ÔÓ¦ÒµÎñÀàProductµÄProductId,¶ø²»ÊÇÆäËûµÄÊôÐÔ¡£

ÔÚmappingµÄʱºò£¬Ò»°ãÊÇÔÚÒµÎñÀàÖж¨ÒåÒ»¸öÊôÐÔ£¬È»ºó¸³Öµ£º

public string ProductId { get; set; }

  this.ProductName = productEntity.Id;

ΪÁ˱£´æÊý¾ÝʵÌå×ֶεÄÐÅÏ¢£¬ÒµÎñÀàµÄÊôÐÔÉùÃ÷¾Í¸ÄΪÏÂÃæÁË£º

´úÂë

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/-->public static readonly PropertyInfo 
ProductIdProperty = RegisterProperty(
      typeof(Product),
      new PropertyInfo("ProductId",typeof(M_Product)","Id")); 

    public string ProductId
    {
      get { return ReadProperty(ProductIdProperty); }
      set { LoadProperty(ProductIdProperty, value); }
    }

ÉÏÃæµÄ´úÂëͨ¹ýÉú³ÉµÄ·½Ê½¾Í±È½Ï·½±ã£¬¶øÇÒÉÏÃæµÄÊôÐÔÉùÃ÷»¹Óиü¶àÆäËûµÄÓÃ;¡£³õÒ»¿´ºÍWPFÖÐÒÀÀµÊôÐÔºÜÏñ£¬È·ÊµË¼Â·Ò²ÊÇ´ÓWPF½è¼ø¶øÀ´µÄ¡£ÕâÀï¼ò³Æ¡°MappingÊôÐÔ¡±¡£

½ñÌì¾Íдµ½ÕâÀï£¬ÕæÊǶԲ»×¡´ó¼Ò£¬ÒòΪ±¾ÆªÐ´µÄ±È½ÏµÄ†ªà£¬¶øÇÒ»¹Ã»ÓÐдÍê¡£ÏÂÆª½²ÊöMappingÊôÐÔµÄʵÏÖÔ­ÀíºÍÔ­Òò£¬¾ÍÊÇΪʲôҪÊÇÓÃProductIdPropertyÄÇÖÖÉùÃ÷·½Ê½¡£

MappingÊôÐÔÔ­ÀíºÍÑéÖ¤¹æÔòµÄʵÏÖ²ßÂÔ

ǰÑÔ£ºÖ®Ç°µÄÌÖÂÛÒ»Ö±¹Ø×¢ÔÚÔõô´ÓDALÖлñÈ¡Êý¾Ý£¬ÒÔ¼°Êý¾ÝµÄMappingÎÊÌ⡣ʵ¼ÊÉÏ£¬Ò»¸öÒµÎñ¿ò¼Ü×îÖ÷ÒªµÄ×÷ÓþÍÊǼò»¯ÒµÎñÂß¼­µÄ±àдºÍ¿ª·¢¡£

1. ¿ò¼ÜµÄ½è¼ø

Ò»¸ö¿ò¼ÜµÄ²úÉú²»ÊÇÄÇô¼òµ¥µÄ£¬ÓкܶàµÄÎÊÌâÐèÒªRichardÈ¥¿¼ÂÇ£º

1.±ÜÃâÖØÐÂÔìÂÖ×Ó

2.½è¼øÏÖÓеijÉÊìµÄ¿ò¼ÜµÄ˼Ïë

ÔÚ¿ª·¢µÄ¹ý³ÌÖУ¬RichardһֱʹÓÃVisual Studio IDE¿ª·¢¡£¶øÇÒÿ´ÎËæ×ÅVSа汾µÄ·¢²¼£¬×ÜÊǰéËæ×Åм¼ÊõµÄ²úÉú¡£ºÜ¶àµÄʱºò£¬¿ª·¢ÈËÔ±Ö»ÊǹØ×¢ÔÚм¼ÊõµÄʹÓúÍѧϰÉÏ¡£µ«ÊǶÔÓÚм¼Êõ£¬»¹ÓÐÁíÍâÒ»·½ÃæÊǺÜÖµµÃ¹Ø×¢µÄ£ºÊµÏÖµÄÔ­Àí£¬ºÍΪʲôÕâÑùʵÏÖ£¬¼´£¬Ë¼Ï롣м¼Êõ£¬ºÁÎÞÒÉÎÊÊÇһЩ´óʦÃÇ˼¿¼µÄ½á¹û£¬´ÓËûÃǵÄ˼ÏëÖÐ½è¼ø£¬Òæ´¦ÊǺܴóµÄ¡£

ÔÚRichardѧϰµÄ¹ý³ÌÖУ¬ÓÐÒ»¸öµØ·½ÌرðÒýÆðÀ´ËûµÄ¹Ø×¢£ºÄǾÍÊÇÒÀÀµÊôÐÔ¸ÅÄîµÄÌá³ö£¬ÏÈÊÇWPF£¬È»ºóÔÚËûѧϰWFµÄʱºò£¬Ò²¿´µ½ÁËÒÀÀµÊôÐÔµÄÔÙ´ÎʹÓá£Ëû¿¼ÂÇ£¬°ÑÒÀÀµÊôÐÔµÄ˼ÏëʹÓõ½×Ô¼ºÕýÔÚ¿ª·¢µÄÒµÎñ¿ò¼ÜÖÐÀ´¡£

Ê×ÏÈ£¬Ëû·ÖÎöÁËÏÖÔÚµÄÒÀÀµÊôÐÔµÄʵÏÖ·½Ê½(ÒÔWPFΪÀý)£¬

´úÂë

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->public class FrameworkElement: UIElement, ...

{

public static readonly DependencyProperty MarginProperty;

...

}

public Thickness Margin
{

set { SetValue(MarginProperty, value); }

get { return (Thickness)GetValue(MarginProperty); }

}

static FrameworkElement()
{

FrameworkPropertyMetadata metadata = new FrameworkPropertyMetadata(

new Thickness(), FrameworkPropertyMetadataOptions.AffectsMeasure);

MarginProperty = DependencyProperty.Register("Margin",

typeof(Thickness), typeof(FrameworkElement), metadata,

new ValidateValueCallback(FrameworkElement.IsMarginValid)); ...

}

ÔÚRichardÒ»Ö±ÈÏΪ£¬Ò»¸öÊôÐÔµÄÉùÃ÷ÊǺܼòµ¥µÄ£¬¶øÇÒ³¤ÆÚÒÔÀ´Richard¶¼Ò»Ö±Ê¹ÓÃÏÂÃæµÄ·½Ê½£º

public Thickness Margin
{

       get;set;

}

±È½Ï¶øÑÔ£¬ÒÀÀµÊôÐÔ×î´óµÄºÃ´¦¾ÍÓÚ£º¸øÆÕͨµÄÊôÐÔÌṩ¸ü¼Ó¶àµÄÐÅÏ¢£¬¶øÇÒÌṩÁ˸ü¶àµÄ¹¦ÄÜ£ºÑéÖ¤£¬´¥·¢»Øµ÷ʼþ¡£µ±È»£¬Ê¹ÓÃÆÕͨµÄÊôÐÔÒ²ÄÜ´ïµ½£º

public Thickness Margin
{

       get{return margin;}
       set
       {

              if(margin<0)
                     ...
              ...
       }
}

Ïà±È¶øÑÔ£¬ÒÀÀµµÄÊôÐԵķ½Ê½¸ü¼ÓÓÅÑÅ£¬¶øÇÒÀ©Õ¹ÐÔÒ²ºÃ¡£

»¹ÓÐÒ»µã±È½ÏÖØÒªµÄ¾ÍÊÇ£¬Ò»µ©°ÑÒ»¸öÊôÐÔ±äΪÒÀÀµÊôÐÔ£¬ÄÇô.NET Framework¾Í¿ªÊ¼¹ÜÀíÕâ¸öÊôÐÔ£¬Èç×Ô¶¯µÄÑéÖ¤£¬ÖµµÄ¸Ä±äºÍ¸ú×Ù¡£ÕâÑù¾Í°ÑÈÎÎñ½»¸øÁËFramework£¬¿ª·¢ÈËÔ±×öÊÂÇé¾Í±È½Ï·½±ãÁË¡£

RichardÏëÆðÁË֮ǰÔÚ¿ª·¢ÒµÎñÀàÖÐÓöµ½µÄÎÊÌ⣺ÀýÈçÏÂÃæµÄ´úÂ룺

public class Product
{

        public string ProductName{get;set;}

        public double Price{get;set;}

}

ºÜ¶àµÄʱºò£¬ÔÚÔö¼Ó»òÕ߸üÐÂÒ»¸öProductµÄʱºò£¬ÓÉÓÚÂß¼­µÄÐèÒª£¬ÍùÍùÒªÅжÏProductName²»Îª¿Õ£¬¶øÇÒPriceÒª´óÓÚÁãµÈ¡£ËùÒÔÿ´Î¶¼ÐèҪд´úÂëÅжϣº

public void Add()
        {

              if(string.IsNullOrEmpty(this.ProductName){...}

              if(this.Price<0){...}

        }

ÎÊÌ⻹²»Ö¹ÕâЩ£¬Èç¹ûÔÚÆäËûµÄÒµÎñÀàÖÐÒ²ÐèҪͬÑù£¬¶øÇÒÀàËÆµÄÑéÖ¤£¬ÄÇÖ»ÓÐÒ»ÐÐÐеÄдÀàËÆµÄ´úÂ룬×îºÃµÄÇé¿ö¾ÍÊÇcopyһЩ´úÂë¡£

ÕâÑùд´úÂëȷʵºÜÀÛ£¬ºóÃæRichardÒ²ÏëÓÃһЩ·½Ê½À´¸Ä½ø£¬Óõ½ÁËEnterprise LibraryÖеÄValidationÑé֤ģ¿é£¬ÓÚÊÇ´úÂë¾Í±ä³ÉÁËÏÂÃæµÄÑù×Ó£º

public class Product
{

        [NotNullValidator]

        public string ProductName{get;set;} 

        public double Price{get;set;}    

}

ʹÓÃÉùÃ÷µÄ¿ª·¢£¬AOPµÄ˼Ï룬ÆäʵÕâÑùµÄ·½Ê½Ïà±È֮ǰ¶øÑÔ£¬È·ÊµÒѾ­ºÜ²»´íÁË¡£ÔÚ°ÑÒµÎñÀàµÄÊý¾Ý±£´æµÄʱºòÖ»Òªµ÷ÓÃValidationÑé֤ģ¿éµÄValidate()·½·¨¾ÍÐÐÁË¡£È·ÊµºÜ·½±ã£¬µ«ÊÇ´æÔÚµÄÎÊÌâ¾ÍÊÇ£ºÃ¿´Îµ÷ÓÃValidate()·½·¨Ê±ºò£¬¾Í»á°ÑÕâ¸öÒµÎñÀàµÄËùÓÐÊôÐÔ¶¼»á¼ì²éÒ»±é(ÄÇЩ¼ÓÁËÑéÖ¤±êÇ©µÄÊôÐÔ)£¬ÕâÑù£¬ÐÔÄÜ·½Ãæ²»ºÃ£¬¶øÇÒ»¹²»ÄÜÕë¶Ôijһ¸öÊôÐÔµ¥¶ÀµÄÑéÖ¤¡£

2. ×ۺϿ¼ÂÇ

Richard»¹¿¼Âǵ½ÁËÁíÍâµÄÒ»µã£ºÖ®Ç°Ò»Ö±ÔÚ½â¾ömappingµÄÎÊÌ⣬˵µ½µ×¾ÍÊǰѴÓDALÖÐÄõ½µÄÊý¾Ý¸³Öµ¸øÒµÎñÀàµÄÊôÐÔ¡£¶øÇÒ»¹Òª»ùÓÚÒµÎñÀà´´½¨²éѯ¶ÔÏó£¬×îºó°Ñ²éѯ¶ÔÏó½âÎöΪSQLÓï¾ä£¬ËùÒÔ»¹Òª±£´æÒµÎñÊôÐÔºÍDALÖÐÊý¾ÝʵÌåÊôÐԵĶÔÓ¦¹ØÏµ£¬¼´ÄĸöÒµÎñÊôÐÔ¶ÔÓ¦ÄĸöÊý¾ÝʵÌåÊôÐÔ£¨Ò²ÊDZí×ֶΣ©¡£

×ÛºÏÉÏÃæµÄ¿¼ÂÇ£¬Richard¾ö¶¨°ÑÒÀÀµÊôÐÔµÄÓÅÊÆÀûÓÃÆðÀ´£¨×Ô¶¯µÄÑéÖ¤£¬Êý¾Ý¸Ä±ä¸ú×Ù£¬ÁíÍâ¼ÓÉÏȨÏÞµÄÑéÖ¤£©£¬¶øÇÒ¸øÒÀÀµÊôÐÔ¸ü¶àµÄÔªÊý¾ÝÐÅÏ¢£º°ÑmappingµÄ×Ö¶ÎÐÅÏ¢±£´æÔÚÒÀÀµÊôÐÔÖС£ËùÒÔ£¬ÏÖÔÚÊôÐÔµÄÉùÃ÷ÈçÏ£º

´úÂë

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/-->public static readonly PropertyInfo ProductIdProperty = RegisterProperty(
            new PropertyInfo("ProductId",typeof(M_Product)","Id")); 

    public string ProductId
    {

      get { return ReadProperty(ProductIdProperty); }
      set { LoadProperty(ProductIdProperty, value); }
    }

ÔÚÉÏÃæµÄÊôÐÔÉùÃ÷ÖУ¬¾ÍÖ¸¶¨´ÓÒµÎñÀà(È磬Product)µÄÊôÐÔ´ÓÄĸöÊý¾ÝʵÌå(typeof(m_Product))µÄÄĸöÊôÐÔ(È磬Id)ȡֵ¡£

RegisterProperty¾ÍÊǰÑÊôÐÔµÄÐÅÏ¢±£´æÔÚÒ»¸ö×ÖµäÖУº

Dictionary<Type,List< IPropertyInfo>>

ÆäÖÐPropertyInfo¼Ì³ÐÁËIPropertyInfo½Ó¿Ú¡£

×îºóµÄ½á¹û¾ÍÊÇ£ºËùÓÐÒµÎñÀàµÄmappingÊôÐÔ¶¼±»±£´æÔÚÁËÒ»¸öÈ«¾ÖµÄ¾²Ì¬×ÖµäÖС£

ÁíÍ⻹ÓÐÒ»¸öÈ«¾ÖµÄ¾²Ì¬×ÖµäÓÃÀ´±£´æÃ¿¸öÊôÐÔËù¶ÔÓ¦µÄÑéÖ¤¹æÔò£º

Dictionary< IPropertyInfo,List<ICheckRule>>

ËùÓеÄÑéÖ¤¹æÔò¶¼ÊÇ´ÓICheckRule½Ó¿Ú¼Ì³Ð¡£

Ò»¸ö±È½ÏÇ¿´óµÄÊôÐԾͲúÉúÁË¡£µ±È»£¬ÔÚmappingÊôÐÔÖеÄÑéÖ¤Ö»ÊÇ»ù±¾µÄÑéÖ¤£¬»¹Óиü¼Ó¸´ÔÓµÄÒµÎñÑéÖ¤½«»á·ÅÔÚÆäËûµÄµØ·½£¬ÊµÏÖ·½Ê½»òÕßÀàËÆWPFÄÇô£º²ÉÓûص÷£¬Èçnew ValidateValueCallback(FrameworkElement.IsMarginValid)¡£

ËùÒÔ£¬½è¼øÓÚmappingÊôÐԾͽâ¾öÁËÈý¸öÎÊÌ⣺

1.mappingºÍ²éѯ¶ÔÏóµÄʵÏÖ

2.²¿·ÖÑéÖ¤¹æÔòµÄÉùÃ÷

3.ÒµÎñÊôÐԵĹÜÀí

   
2055 ´Îä¯ÀÀ       27
 
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
 
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
 
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

ʹÓÃdecj¼ò»¯Webǰ¶Ë¿ª·¢
Web¿ª·¢¿ò¼ÜÐγÉÖ®ÂÃ
¸üÓÐЧÂʵÄʹÓÃVisual Studio
MVP+WCF+Èý²ã½á¹¹´î½¨¿ò¼Ü
ASP.NETÔËÐлúÖÆÇ³Îö¡¾Í¼½â¡¿
±àд¸üºÃµÄC#´úÂë
10¸öVisual Studio¿ª·¢µ÷ÊÔ¼¼ÇÉ

.NET¿ò¼ÜÓë·Ö²¼Ê½Ó¦Óüܹ¹Éè¼Æ
.NET & WPF & WCFÓ¦Óÿª·¢
UML&.Net¼Ü¹¹Éè¼Æ
COM×é¼þ¿ª·¢
.NetÓ¦Óÿª·¢
InstallShield

ÈÕÕÕ¸Û .NET Framework & WCFÓ¦Óÿª·¢
Éñ»ªÐÅÏ¢ .NETµ¥Ôª²âÊÔ
±±¾© .NetÓ¦ÓÃÈí¼þϵͳ¼Ü¹¹
̨´ïµç×Ó .NET³ÌÐòÉè¼ÆÓ뿪·¢
ÈüÃÅÌú¿Ë C#Óë.NET¼Ü¹¹Éè¼Æ
¹ã¶«ºËµç .NetÓ¦ÓÃϵͳ¼Ü¹¹