这是“windows phone mango本地数据库(sqlce)”系列短片文章的第五篇。 为了让你开始在Windows Phone Mango中使用数据库,这一系列短片文章将覆盖所有你需要知道的知识点。 我将谈谈在windows phone mango本地数据库时使用[Association] attribute。

首先、要说到的是,windows phone 7.1上的数据库功能是SQL Compact关于Mango的一个实现。你将使用linq to sql访问存储在数据库上的数据。

1、 [Association] attribute 是什么

   在LINQ to SQL中实体类之间的关联类似于在数据库中表之间的关联。
   [Association] attribute用于指定在数据库中的一个属性来表示关联。例如一个外键到主键的关系。你也可以表示一对一或多对多的关系。
  • 一对一:在关联的两端使用包含属性的EntitySet<TEntity>类型表示这种关系。
  • 多对多:在多对多关系中,链表(也叫联结表)的主键,通常形成其他两个表复合的一个外键。
 

2、怎么使用[Association] attribute

   关联指定使用 [Association] attribute,这允许你在数据库映射中两个类型间配置关系。
 
   [Association] attribute有下面几个重要属性:
  • OtherKey-属性的名称对应关联的另一端对象的id(获取或设置在关联的另一端上作为键值的、目标实体类的一个或多个成员)
  • ThisKey-对于这种类型,属性的名字与外键相对应(获取或设置表示关联的此端上的键值的此实体类成员)
  • Storage-这属性支持变量(获取或设置用来保存列中的值的私有存储字段。)
注释:括号内是MSDN上面的解释
 
一对多复合关联
 
示例1:
 1 [Table]
2 public class Country
3 {
4 ...
5
6 private EntitySet<City> citiesRef;
7
8 [Association(Name = "FK_Country_Cities", Storage = "citiesRef", ThisKey = "ID", OtherKey = "CountryID")]
9 public EntitySet<City> Cities
10 {
11 get
12 {
13 return this.citiesRef;
14 }
15 }
16 ...
17
18 }

注释:在上面的代码片段中,citiesRef 支持EntitySet<City>类型的变量,因为citiesRef 是“一对多”关联的“多”这一边的。

示例2:

 1 [Table]
2 public class City
3 {
4 //...
5
6 private EntityRef<Country> countryRef = new EntityRef<Country>();
7
8
9 [Association(Name = "FK_Country_Cities", Storage = "countryRef", ThisKey = "CountryID", OtherKey = "ID", IsForeignKey = true)]
10 public Country Country
11 {
12 get
13 {
14 return this.countryRef.Entity;
15 }
16 set
17 {
18 Country previousValue = this.countryRef.Entity;
19 if (((previousValue != value) || (this.countryRef.HasLoadedOrAssignedValue == false)))
20 {
21 if ((previousValue != null))
22 {
23 this.countryRef.Entity = null;
24 previousValue.Cities.Remove(this);
25 }
26 this.countryRef.Entity = value;
27 if ((value != null))
28 {
29 value.Cities.Add(this);
30 this.countryID = value.ID;
31 }
32 else
33 {
34 this.countryID = default(Nullable<int>);
35 }
36 }
37 }
38 }
39 //...
40
41 }

注释:在上面的代码片段中,countryRef 支持EntityRef<Country>类型的变量,因为citiesRef 是“一对多”关联的“一”这一边的。

你也可以参考这里http://www.windowsphonegeek.com/articles/Windows-Phone-Mango-Local-Database-mapping-and-database-operations

这篇文章我谈了有关在windows phone mango本地数据库中使用[Association] attribute。请继续关注接下来的文章。

Windows Phone本地数据库(SQLCE):5、[Association]attribute(翻译)(转)的更多相关文章

  1. Windows Phone本地数据库(SQLCE):6、[Index] attribute(翻译)(转)

    这是“windows phone mango本地数据库(sqlce)”系列短片文章的第六篇. 为了让你开始在Windows Phone Mango中使用数据库,这一系列短片文章将覆盖所有你需要知道的知 ...

  2. Windows Phone本地数据库(SQLCE):4、[Column]attribute(翻译) (转)

    这是“windows phone mango本地数据库(sqlce)”系列短片文章的第四篇. 为了让你开始在Windows Phone Mango中使用数据库,这一系列短片文章将覆盖所有你需要知道的知 ...

  3. Windows Phone本地数据库(SQLCE):3、[table]attribute(翻译) (转)

    这是“windows phone mango本地数据库(sqlce)”系列短片文章的第三篇. 为了让你开始在Windows Phone Mango中使用数据库,这一系列短片文章将覆盖所有你需要知道的知 ...

  4. Windows Phone本地数据库(SQLCE):7、Database mapping(翻译)

    这是“windows phone mango本地数据库(sqlce)”系列短片文章的第七篇. 为了让你开始在Windows Phone Mango中使用数据库,这一系列短片文章将覆盖所有你需要知道的知 ...

  5. Windows Phone本地数据库(SQLCE):1、介绍(翻译)(转)

    一只大菜鸟,最近要学习windows phone数据库相关的知识,找到了一些比较简短的教程进行学习,由于是英文的,顺便给翻译了.本身英语水平就不好,估计文中有不少错误,如果有不幸读到的童鞋请保持对翻译 ...

  6. Windows Phone本地数据库(SQLCE):14、删除数据(翻译)

    这是“windows phone mango本地数据库(sqlce)”系列短片文章的最后一篇第十四篇. 为了让你开始在Windows Phone Mango中使用数据库,这一系列短片文章将覆盖所有你需 ...

  7. Windows Phone本地数据库(SQLCE):13、更新数据(翻译)

    这是“windows phone mango本地数据库(sqlce)”系列短片文章的第十三篇. 为了让你开始在Windows Phone Mango中使用数据库,这一系列短片文章将覆盖所有你需要知道的 ...

  8. Windows Phone本地数据库(SQLCE):12、插入数据(翻译)

    这是“windows phone mango本地数据库(sqlce)”系列短片文章的第十二篇. 为了让你开始在Windows Phone Mango中使用数据库,这一系列短片文章将覆盖所有你需要知道的 ...

  9. Windows Phone本地数据库(SQLCE):11、使用LINQ查询数据库(翻译) (转)

    这是“windows phone mango本地数据库(sqlce)”系列短片文章的第十一篇. 为了让你开始在Windows Phone Mango中使用数据库,这一系列短片文章将覆盖所有你需要知道的 ...

随机推荐

  1. [转]MongoDB更新操作replaceOne()实例讲解

    最近正在学习MongoDB,作为数据库的学习当然是要从CRUD开始学起了.这篇文章默认读者是知道如何安装MongoDB.如何运行MongoDB实例以及了解了MongoDB中的collection.do ...

  2. 安装Scrapy遇到的坑

    安装过程怕是要吐血,架梯子等等结果被setuptools的版本给坑了. 参考网址: http://blog.csdn.net/YHYR_YCY/article/details/78876148 htt ...

  3. 005_系统运维之SLA与SLO的关系

    服务水平协议(简称:SLA,全称:service level agreement)是在一定开销下为保障服务的性能和可靠性,服务提供商与用户间定义的一种双方认可的协定.通常这个开销是驱动提供服务质量的主 ...

  4. intelliJ 打包jar的多种方式

    这里总结出用IntelliJ IDEA打包jar包的多种方式,以后的项目打包Jar包可以参考如下形式: 用IDEA自带的打包形式 用Maven插件maven-shade-plugin打包 用Maven ...

  5. Codeforces 336D Dima and Trap Graph 并查集

    Dima and Trap Graph 枚举区间的左端点, 然后那些左端点比枚举的左端点小的都按右端点排序然后并查集去check #include<bits/stdc++.h> #defi ...

  6. git仓库使用

    1.git命令参数 usage: git [--version] [--help] [-c name=value] [--exec-path[=<path>]] [--html-path] ...

  7. 使用ajax与jqplot的小体会

    在使用ajax与jqplot时遇到了传值的问题!一开始都不知值是怎么传过去的,只找到了例子是以<div id="data">原始数据</div>这样子来接收 ...

  8. 新手通过SVN向eclipse中导入项目注意事项

    该文章进行的前提是,jdk.eclipse.tomcat.maven已安装完成 要从svn上获取项目数据,首先要安装svn 1)通过help->installsoft->svn->a ...

  9. Android中加载事件的方式

    Android中加载事件的方式 通过内部类的方式实现 通过外部类的方式实现 通过属性的方式实现 通过自身实现接口的方式实现 通过内部类的方式实现 Demo btn_Login.setOnClickLi ...

  10. Python基础笔记(三)

    1. 循环与流程控制 (1) for myList1 = ["A", "B", "C", "D"] # 正序遍历 for ...