逻辑三层ORM通用类库 ThreeLayerLib.dll v1.0
作者:wxl 本类库的目标用户是使用C#开发基于数据库的.NET程序的开发者,旨在简化对常用数据库的CRUD操作,同时提供了一种简化的ORM机制,使基于本类库开发的程序具有更好的可扩展性和可维护性。
本类库默认SQLServer数据库,但并不受数据库类型的限制,开发者可以使用任何自己需要的关系数据库,如 SQLServer、Access、MySQL等。
使用方法:
目前版本需用户自己定义数据库表格的相应实体类,下一版本中作者将实现自动化。实体类应具有【TableAttribute】特性,以标识数据库表名。默认SQLServer数据库,如果用户需要扩展其他类型数据库,则需要自己做一个类库项目,且包含如下两个类:
1、能够实现IDAL的类
2、能够实现IDbHelper的类 举例:[TableAttribute("t_Email")]
public class Model_t_Email
{
protected int _Email_ID; public int Email_ID
{
get { return _Email_ID; }
set { _Email_ID = value;}
}
protected string _Email_Title; public string Email_Title
{
get { return _Email_Title; }
set { _Email_Title = value; }
}
protected string _Email_SendTo; public string Email_SendTo
{
get { return _Email_SendTo; }
set { _Email_SendTo = value; }
}
protected string _Email_From; public string Email_From
{
get { return _Email_From; }
set { _Email_From = value; }
}
protected string _Email_Content; public string Email_Content
{
get { return _Email_Content; }
set { _Email_Content = value; }
}
protected string _Email_Attatchment; public string Email_Attatchment
{
get { return _Email_Attatchment; }
set { _Email_Attatchment = value; }
}
protected string _Email_Time; public string Email_Time
{
get { return _Email_Time; }
set { _Email_Time = value; }
}
protected string _Email_IsReadAlready; public string Email_IsReadAlready
{
get { return _Email_IsReadAlready; }
set { _Email_IsReadAlready = value; }
} }
private string constr = "server=192.168.143.18;database=D16;uid=sa;pwd=123456";
BLL<Model_t_Email> bll = new BLL<Model_t_Email>(constr); //如果要使用其他非SQLServer数据库,请用户自己做一个类库,假设叫AccessHelper.dll,且包含如下两个类:
//1、能够实现IDAL的类
//2、能够实现IDbHelper的类
//BLL<Model_t_Email> bll = new BLL<Model_t_Email>(constr, Application.StartupPath + @"\AccessHelper.dll"); Model_t_Email model = new Model_t_Email();
model.Email_ID = bll.GetMaxID() + 1;
model.Email_Title = "Fu";
bll.Add(model);
List<Model_t_Email> list = bll.GetListModel();
作者:wxl 本类库的目标用户是使用C#开发基于数据库的.NET程序的开发者,旨在简化对常用数据库的CRUD操作,同时提供了一种简化的ORM机制,使基于本类库开发的程序具有更好的可扩展性和可维护性。
本类库默认SQLServer数据库,但并不受数据库类型的限制,开发者可以使用任何自己需要的关系数据库,如 SQLServer、Access、MySQL等。
使用方法:
目前版本需用户自己定义数据库表格的相应实体类,下一版本中作者将实现自动化。实体类应具有【TableAttribute】特性,以标识数据库表名。默认SQLServer数据库,如果用户需要扩展其他类型数据库,则需要自己做一个类库项目,且包含如下两个类:
1、能够实现IDAL的类
2、能够实现IDbHelper的类 举例:[TableAttribute("t_Email")]
public class Model_t_Email
{
protected int _Email_ID; public int Email_ID
{
get { return _Email_ID; }
set { _Email_ID = value;}
}
protected string _Email_Title; public string Email_Title
{
get { return _Email_Title; }
set { _Email_Title = value; }
}
protected string _Email_SendTo; public string Email_SendTo
{
get { return _Email_SendTo; }
set { _Email_SendTo = value; }
}
protected string _Email_From; public string Email_From
{
get { return _Email_From; }
set { _Email_From = value; }
}
protected string _Email_Content; public string Email_Content
{
get { return _Email_Content; }
set { _Email_Content = value; }
}
protected string _Email_Attatchment; public string Email_Attatchment
{
get { return _Email_Attatchment; }
set { _Email_Attatchment = value; }
}
protected string _Email_Time; public string Email_Time
{
get { return _Email_Time; }
set { _Email_Time = value; }
}
protected string _Email_IsReadAlready; public string Email_IsReadAlready
{
get { return _Email_IsReadAlready; }
set { _Email_IsReadAlready = value; }
} }
private string constr = "server=192.168.143.18;database=D16;uid=sa;pwd=123456";
BLL<Model_t_Email> bll = new BLL<Model_t_Email>(constr); //如果要使用其他非SQLServer数据库,请用户自己做一个类库,假设叫AccessHelper.dll,且包含如下两个类:
//1、能够实现IDAL的类
//2、能够实现IDbHelper的类
//BLL<Model_t_Email> bll = new BLL<Model_t_Email>(constr, Application.StartupPath + @"\AccessHelper.dll"); Model_t_Email model = new Model_t_Email();
model.Email_ID = bll.GetMaxID() + 1;
model.Email_Title = "Fu";
bll.Add(model);
List<Model_t_Email> list = bll.GetListModel();
解决方案 »
- MSN聊天记录中用户名后面的数字是什么?
- 调用SqlDataAdapter的update更新的问题
- 在窗体上画一根凹下去的细线怎么做 ?
- DataTable 是不明确的引用
- 白痴问题 + 给分问题 只要不是不想要分的都应该来看看!!~~
- 帮忙:解决一下计算字段问题
- 一个很大的程序代码,有很多层,转来转去的,手上没有uml图,要把这段代码全部理解,除了一遍一遍的看以外,各位都有什么好的方法?
- 如何实现两个TreeView同步
- 求助,如何在下拉条中显示两个表的内容?
- 自定义水晶报表的显示,比如隐藏工具栏,让报表左对齐,去除水晶报表的公司LOGO等………(新作:海波.NET)
- 【急】使用c#产生数据发往指定服务器
- 求助!WPF的DataGrid和TreeView
protected int _Email_ID; public int Email_ID
{
get { return _Email_ID; }
set { _Email_ID = value;}
}
=>
public int Email_ID { get; set; }
其他类似
===
这个一般我更喜欢将主键ID 在数据库中设置为自增
model.Email_ID = bll.GetMaxID() + 1;
model.Email_Title = "Fu";
一般我的系统根据需求:用主键编号
可能是字符串呢
也可以是guid
也可以是自增id [这个一般我不这样用,数据迁移是个大问题]
但是要考虑字符串的主键和联合主键
public int Email_ID { get; set; }
当然可以用java写,本文只是提供了一个C#的实现。其实.NET在很大程度上是借鉴了java的思想,包括抛弃指针、好多框架也是借鉴java的框架。另外小弟也是初学者,请大神指教,谢谢!
没有看你的代码,不评论其它问题。单就#13楼所说的“并发”而言,这个代码大致应该修改为这样:首先你需要在class范畴定义变量private static object IDLockFlag= new object();
然后将计算ID过程编程管理程序(只允许单线程)例如long newID;
lock(IDLockFlag)
{
newID= bll.GetMaxID() + 1;
bll.SetMaxID(newID);
}
model.Email_ID = newID;
假设你使用一个表专门记录每一类对象的MaxID,而你对此表的读写又要分开在.net中编程(而不是在一个DBTransaction中),那么就需要保证在过程中对此读数的读和写两个操作之间的完整过程(也就是这两行代码而已)是线程互斥的。
哥笑了,C#并未抛弃指针,C#一样可以使用指针,而且3层架构以及ORM本身并非借鉴JAVA的思想!
lock本身也是有问题的。多进程也不行
C#确实可以unsafe使用指针,但本人很排斥C#的指针操作,曾经一度差点放弃C#,拾起C++的老本行,呵呵!
这里有一套源码例子,不知道是否切题。
在下也粗浅的研究过CSLA.NET,人家的东西太牛了,很专业的架构,至今在下也没有完全弄懂,正在研究中......
NHibernate好像被Spring.NET给包含了,不知道为什么。
大家注意:并不是在3.0里增加的,而是在vs2008里增加的自动属性.
详见vs2008新增功能. 而非.net3.0新增功能.在vs2008里开发,.net使用2.0也可以使用自动属性
//如果只让自己或者子类赋值则可以定义为:
public int Count { get; protected set; }
1、实体类自动生成器(现在正在做,基本没有难度)。
2、改进数据访问层的SQL查询
3、