您的位置:知识库 » 数据库

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

作者: 横刀天笑  来源: 博客园  发布时间: 2008-09-23 19:02  阅读: 8538 次  推荐: 3   原文链接   [收藏]  

系列文章导航:

走进Linq--Linq横空出世篇

走进Linq-辉煌的背后

走进Linq-Linq大观园

不能不说的C#特性-对象集合初始化器

不能不说的C#特性-匿名类型与隐式类型局部变量

不能不说的C#特性-扩展方法

不能不说的C#特性-匿名方法和Lambda表达式

不能不说的C#特性-迭代器(上)及一些研究过程中的副产品

不能不说的C#特性-迭代器(下),yield以及流的延迟计算

走进Linq-Linq to Objects(上)基础篇

走进Linq-Linq to Objects(下)实例篇

走进Linq-Linq to SQL感性认识篇

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

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

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

走进Linq-How do I(4)拾遗补零篇第一节

走进Linq-Linq to SQL源代码赏析 Table的获取过程

走进Linq-Linq to SQL源代码赏析之Provider的初始化

走进Linq-Linq to SQL源代码赏析,通过Linq to SQL看Linq


一对多关系

在上面的映射中,Blog还有一个属性:Posts,我们并没有做什么处理,实际上这个应该是根据BlogId属性关联到PostBlogId属性,进行关联的。

为此我们要修改一下这个Blog的映射:

/// 
/// 一个博客有零篇或多篇文章,
/// 
[Association(OtherKey = "BlogId")]
public EntitySet<Post> Posts { getset; }
使用Association建立映射关系,她有一个OtherKey属性,该属性指定为被关联的那个对象中做连接的那个属性(外键)(这里被关联的就是Post类,做连接的那个属性就是BlogId,她也是posts表的外键),还要注意的是,我们要把原来使用的IList换成EntitySetEntitySetLinq新提供的一个类,在System.Data.Linq命名空间下。

下面来看看例子:

 var result = from blog in dbContext.GetTable<Blog>()
           
where blog.Id == 1
           select blog;
foreach (var item in result)
{
    Console.WriteLine(item.Name);
    
if (item.Posts == null || item.Posts.Count <= 0return;
    
foreach (var post in item.Posts)
    {
        Console.WriteLine(post.Title);
    }
}

我们只要对blog进行查询就ok了,和她关联的Post自动的会映射过来的。

上面的例子只表明了在Blog类里,如何关联到该博客的所有Post,如果我在Post里想关联到该Post属于哪个博客呢?

Post类里添加:

//注意,用的是EntityRef
        private EntityRef<Blog> _blog;
       
//从这里可以看出Storage属性的作用了吧,这里的ThisKey指定的是
       
//本类里面的BlogId,一个外键,并不是主键了哦。
        [Association(Storage="_blog",ThisKey="BlogId")]
        
public Blog Blog
        {
            
get { return _blog.Entity; }
            
set { _blog.Entity = value; }
        }

这样就ok了,你查一个Post的时候会自动的把其所属的博客也给弄出来哦。而且这个EntityRef还是支持延迟加载的。

3
0
标签:LINQ LINQ to SQL

数据库热门文章

    数据库最新文章

      最新新闻

        热门新闻