随笔-4  评论-15  文章-0  trackbacks-0

发现我很“强大”,“预见”了很多当时还曾为“未来”的LinQ的一些设计。
 

- -!

曾经很多次想将它合并入LinQ来共同使用,最后却发现,设计的功能,LinQ全都有了,包括当时没有实现的(比如记录字段修改状态)LinQ也有了。 

以前设计的数据库访问层代码,有兴趣的可以看看。
一些由于特殊原因仍未能使用LinQ的朋友们还是可以参考下的。
http://files.cnblogs.com/wesley/Data.rar

posted on 2008-04-03 23:31 Wesley.Chen 阅读(1198) 评论(13)  编辑 收藏

评论:
#1楼  2008-04-04 05:32 | deerchao      
节哀顺便:)
  回复  引用  查看    
#2楼  2008-04-04 11:17 | 新程金锣      
Linq,正在观望中……
  回复  引用  查看    
#3楼  2008-04-04 13:39 | lexus      
用了一下linq2sql确实不错,
  回复  引用  查看    
#4楼  2008-04-04 17:10 | Justin      
呵呵,相信lz对LINQ已经不学自通了吧
  回复  引用  查看    
#5楼  2008-04-04 18:17 | Judds [未注册用户]
你的这个是怎么用的,学习一下。
  回复  引用    
#6楼 [楼主] 2008-04-04 18:34 | Wesley.Chen      
//Add
public void Add(string location, string label, string logo, int orderId)
{
    FriendLink friendLink 
= new FriendLink();
    friendLink.Location 
= location;
    friendLink.Label 
= label;
    friendLink.Logo 
= logo;
    friendLink.OrderId 
= orderId;
    
this.Add(friendLink);
}

public virtual void Add(FriendLink friendLink)
{
    Database.Helper.Add(friendLink, 
new string[] "Location""Label""Logo""OrderId" });
}


//Update
public int Update(int id, FriendLink friendLink, string[] updateFields)
{
    
return Database.Helper.Update(friendLink, updateFields, "Id={0}", id);
}


//Delete
public int Delete(int id)
{
    
return Database.Helper.Delete("forums_FriendLink""Id={0}", id);
}

public int Delete(string[] idArray)
{
    
return Database.Helper.Delete("forums_FriendLink""Id in (" + string.Join("", idArray) + ")");
}


//Select
public FriendLink Select(int id, string[] selectFields)
{
    FriendLink friendLink 
= new FriendLink();
    
return Database.Helper.TryFill(friendLink, selectFields, "Id={0}", id) ? friendLink : null;
}

  回复  引用  查看    
#7楼 [楼主] 2008-04-04 18:40 | Wesley.Chen      
以上是在实际项目应用中的数据层代码,4个比较有代表性的数据库操作。

以下是 FriendLink 的 实体和元数据的代码
以下这些代码都是由工具产生的。

另外说一句,当时设计的这个东西同时用于.NET 1.1和2.0
所以很多可以使用2.0现成的东西都作了自定义实现.

using System;
using System.Data;
using Zealot.Framework.Data;

namespace Zealot.Forums.DataModel.Entities
{
    
public class FriendLink : IEntity
    
{
        
public FriendLink()
        
{
        }


        
public FriendLink(DataRow dataRow)
        
{
            
if (dataRow == null)
            
{
                
throw new ArgumentNullException("dataRow");
            }

            
int fieldCount = dataRow.Table.Columns.Count;
            
for (int i = 0; i < fieldCount; i++)
            
{
                
this[dataRow.Table.Columns[i].ColumnName] = dataRow[i];
            }

        }


        
public string TableName
        
{
            
get
            
{
                
return "forums_FriendLink";
            }

        }

        
public virtual object this[string fieldName]
        
{
            
get
            
{
                
switch (fieldName.ToLower())
                
{
                    
default:
                        
return null;
                    
case "id":
                        
return _id;
                    
case "orderid":
                        
return _orderId;
                    
case "label":
                        
return _label;
                    
case "logo":
                        
return _logo;
                    
case "location":
                        
return _location;
                }

            }

            
set
            
{
                
switch (fieldName.ToLower())
                
{
                    
default:
                        
break;
                    
case "id":
                        _id 
= (int)value;
                        
break;
                    
case "orderid":
                        _orderId 
= (int)value;
                        
break;
                    
case "label":
                        _label 
= Convert.ToString(value);
                        
break;
                    
case "logo":
                        _logo 
= Convert.ToString(value);
                        
break;
                    
case "location":
                        _location 
= (string)value;
                        
break;
                }

            }

        }


        
private int _id;
        
public int Id
        
{
            
get
            
{
                
return _id;
            }

            
set
            
{
                _id 
= value;
            }

        }


        
private int _orderId;
        
public int OrderId
        
{
            
get
            
{
                
return _orderId;
            }

            
set
            
{
                _orderId 
= value;
            }

        }


        
private string _label;
        
public string Label
        
{
            
get
            
{
                
return _label;
            }

            
set
            
{
                _label 
= value;
            }

        }


        
private string _logo;
        
public string Logo
        
{
            
get
            
{
                
return _logo;
            }

            
set
            
{
                _logo 
= value;
            }

        }


        
private string _location;
        
public string Location
        
{
            
get
            
{
                
return _location;
            }

            
set
            
{
                _location 
= value;
            }

        }

    }

}


using Zealot.Framework.Data;

namespace Zealot.Forums.DataModel.Schema
{
    
public sealed class FriendLinkSchema
    
{
        
private FriendLinkSchema()
        
{
        }


        
public const string Id = "Id";
        
public const string OrderId = "OrderId";
        
public const string Label = "Label";
        
public const string Logo = "Logo";
        
public const string Location = "Location";

        
public const string TABLE_NAME = "forums_FriendLink";
        
public const string PRIMARY_KEY = Id;

        
public static string[] AllFields
        
{
            
get
            
{
                
return new string[] {
                    Id,
                    OrderId,
                    Label,
                    Logo,
                    Location
                }
;
            }

        }

    }

}


  回复  引用  查看    
#8楼  2008-04-05 08:14 | 曾哲      
楼主用什么工具生成的啊
  回复  引用  查看    
#9楼  2008-04-05 10:16 | Judds [未注册用户]
楼主把生成工具一起开源了吧,造福一下象我这样的懒人 :-)
  回复  引用    
#10楼  2008-04-05 17:33 | 生鱼片      
支持下
  回复  引用  查看    
#11楼 [楼主] 2008-04-05 20:22 | Wesley.Chen      
@Judds

关于代码自动创建工具,以前写过不止一次,时间过去一两年了,找了一番只找到2个,都打在包里了。

工具不复杂,但需要配置模板,也已经顺便在里面打包了模板作参考,能看与否自己琢磨一下吧。

此2个工具的源文件暂时不发了,我写winform是菜鸟,再加上写这种工具本也是自己用用,不看也罢。
别说这是为ASP.NET 1.1 设计的,现在有了Linq,已经非常鸡肋了。

下载地址:
http://www.cnblogs.com/Files/wesley/DataLayerCreater.rar
  回复  引用  查看    
#12楼  2008-04-06 08:20 | Judds [未注册用户]
谢谢!Linq新技术,还是不敢用在项目中啊,风险太大。
  回复  引用    
#13楼  2008-04-06 21:19 | scotoma      
谢谢楼主的共享哦.................呵呵.
  回复  引用  查看    

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      


相关链接: