您的位置:首页 > 数据库

走进Linq-Linq to SQL How do I(2)

2008-08-05 11:07 417 查看
本篇是Linq to SQL How do I的第二篇,难度系数100,定位为进阶级。

内容

l 对象之间的关系

对象之间的关系

既然是对象-关系映射,各个表之间肯定不是独立存在的(如果都是独立存在的,也没有必要用关系数据库了),那么就必然涉及到几个表之间的联合了。

Linq to SQL和SQL语句一样,支持两种方式的联合:

1. 利用where子句,对两个表进行查找

2. 使用join子句

我们还是用例子来说明吧,现在要对blogs和posts进行查询,传入一篇文章的id的时候,找出这篇文章相关信息的同时还要找出这篇文章属于哪个博客,接着上篇的例子,我们首先得给Blog类加上映射:

[Table(Name="blogs")]

public class Blog

[Table(Name="users")]

public class User

{

/**//// <summary>

/// 用户标识

/// </summary>

[Column(Name="userid",IsPrimaryKey=true,IsDbGenerated=true)]

public int Id { get; set; }

[Column]

public int BlogId { get; set; }

/**//// <summary>

/// 该用户对应的博客,

/// 一个用户有且仅有一个博客

/// </summary>

[Association(ThisKey="BlogId",OtherKey="Id",IsUnique=true)]

public EntitySet<Blog> Blog { get; set; }

/**//// <summary>

/// 用户名

/// </summary>

[Column]

public string UserName { get; set; }

/**//// <summary>

/// 密码

/// </summary>

[Column]

public string Password { get; set; }

/**//// <summary>

/// 昵称

/// </summary>

[Column]

public string NickName { get; set; }

/**//// <summary>

/// 用户离开时间,临时存储用户离开时间的,数据库

/// 里并没有对应的字段,所以不做映射

/// </summary>

public DateTime LeaveTime { get; set; }

}
Blog类前面已经出现过,我们就不列出全部代码,将Blog类修改如下:

[Column]

public int UserId { get; set; }

[Association(ThisKey="UserId",OtherKey="Id",IsUnique=true)]

public EntitySet<User> User { get; set; }

就是添加一个EntitySet<User> User的属性而已。

看看操作:



通过查询结果可以看出,他们之间的关系建立了。

后记

本来这一篇我准备了好几个内容,但是在上篇评论里,有人说我的一篇太长了,确实,如果太长了,没有多少人能有耐心看下去,而且看的时间太长对眼睛也不好,在办公室里也不好意思老顶着屏幕看博客吧,boss看了也不好啊,所以这篇就光说一个关联了,那看来这个How do I原计划的三篇是不能完成了。其实文章有点长,看起来应该很快,没有什么难度的内容,而且我是以讲话的风格写的,本系列的内容我的计划是把Linq讲的透透彻彻的,从表面上如何使用,到后面是怎么实现的都说一遍,所以每一篇都是整个系列的一个元组。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: