您的位置:首页 > 编程语言 > Qt开发

LinqToSql--DataContext与实体

2009-11-23 20:19 489 查看
DataContext类型是System.Data.Linq命名空间下的重要类型,用于把查询语法翻译成Sql语句,以及把数据从数据库返回给调用方和把实体的修改写入数据库.

DataContext提供了以下常用功能:

1.以日志形式记录DataContext生成的Sql

2.执行Sql

3.创建和删除数据库

DataContext是实体和数据库之间的桥梁,那么我们首先需要定义映射到数据库的实体

定义实体类:

namespaceDE
{
[Table(Name="users")]
publicclassUsers
{
publicUsers()
{
//
//TODO:在此处添加构造函数逻辑
//
}

[Column(Name="userid",IsPrimaryKey=true,DbType="int")]
publicintUserId
{
get;
set;
}

[Column(Name="username")]
publicstringUserName
{
get;
set;
}

[Column(Name="userpwd")]
publicstringUserPwd
{
get;
set;
}

[Column(Name="age")]
publicintAge
{
get;
set;
}
}
}

其中UserId字段是主键,如果没有指定属性中的Column特性的Name属性,那么系统会把属性名作为数据库的字段名
也就是说实体类的属性名就需要和数据库表中的字段名一致.
页面调用1:
创建一个Asp.Net页面,加入一个GridView,后台代码如下:
protectedvoidPage_Load(objectsender,EventArgse)
{
stringconnstr=ConfigurationManager.ConnectionStrings["ReportConnectionString"].ToString();
DataContextdc=newDataContext(connstr);
GridView1.DataSource=dc.GetTable<DE.Users>();
GridView1.DataBind();
}
页面效果如下:



使用强类型的DataContext
publicclassUsersDataContext:DataContext
{
publicTable<DE.Users>Users;

publicUsersDataContext(IDbConnectionconnection)
:base(connection)
{
}

publicUsersDataContext(stringconnection)
:base(connection)
{
}

}

此时,页面调用如下:

protectedvoidPage_Load(objectsender,EventArgse)
{
stringconnstr=ConfigurationManager.ConnectionStrings["ReportConnectionString"].ToString();
UsersDataContextdc=newUsersDataContext(connstr);
GridView1.DataSource=dc.Users;
GridView1.DataBind();
}
DataContext的日志功能
protectedvoidPage_Load(objectsender,EventArgse)
{
stringconnstr=ConfigurationManager.ConnectionStrings["ReportConnectionString"].ToString();
UsersDataContextdc=newUsersDataContext(connstr);

System.IO.TextWritertw=newSystem.IO.StreamWriter(Server.MapPath("log.txt"),true);
dc.Log=tw;

GridView1.DataSource=dc.Users;
GridView1.DataBind();

tw.Close();
}

此时注意将log.txt设置为everyone属性.执行页面,内容如下:

SELECT[t0].[userid]AS[UserId],[t0].[username]AS[UserName],[t0].[userpwd]AS[UserPwd],[t0].[age]AS[Age]
FROM[users]AS[t0]
--Context:SqlProvider(Sql2000)Model:AttributedMetaModelBuild:3.5.30729.1
执行Sql语句

protectedvoidPage_Load(objectsender,EventArgse)
{
stringconnstr=ConfigurationManager.ConnectionStrings["ReportConnectionString"].ToString();
DataContextdc=newDataContext(connstr);
stringUpdateSql="@userid";

System.IO.TextWritertw=newSystem.IO.StreamWriter(Server.MapPath("log.txt"),true);
dc.Log=tw;

dc.ExecuteCommand("updateuserssetage=10whereuserid={0}",16);
GridView1.DataSource=dc.ExecuteQuery<DE.Users>("select*fromusers");
GridView1.DataBind();

tw.Close();
}
页面效果:



查询日志,结果如下:

updateuserssetage=10whereuserid=@p0
--@p0:InputInt(Size=0;Prec=0;Scale=0)[16]
--Context:SqlProvider(Sql2000)Model:AttributedMetaModelBuild:3.5.30729.1

select*fromusers
--Context:SqlProvider(Sql2000)Model:AttributedMetaModelBuild:3.5.30729.1
创建数据库

步骤:
1.建立映射类

[Table(Name="testTable")]
publicclasstestTable
{
[Column(Name="sid",DbType="int")]
publicintsid
{
get;
set;
}

[Column(Name="Name",DbType="nvarchar(20)")]
publicstringName
{
get;
set;
}
}
2.建立DataContext实体类

publicclassDefContext:DataContext
{
publicDefContext(IDbConnectionconn)
:base(conn)
{
}

publicTable<testTable>testTable;
}
3.前台代码如下:
protectedvoidPage_Load(objectsender,EventArgse)
{
stringconnst="server=.;database=re;uid=sa";
IDbConnectionconn=newSqlConnection(connst);
DefContextdc=newDefContext(conn);
dc.CreateDatabase();
}
4.结果

建立了一个名为re的数据库.
在re数据库中建立了一个表,即为上面定义的表
注意:

无法建立一个空的数据库,要建立数据库的同时,相应的也必须在该库中建立一个表.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: