Entity Framework Code First for SQL Compact
这篇博客将介绍EF Code First中如何使用SQL Compact。SQL Compact是微软推出的免费的关系型数据库,目前最新版本是SQL Compact 4.0。微软的开发工具VS 2010/SQL Server 2008及后续版本中均不带有SQL Compac 3.5/4.0t数据库查看工具。不过CodePlex上有一个SqlCeToolbox的工具非常不错。有点儿像精简版的SQL Server Management Studio。
SQL Compact可以用于以下的一些场景,例如在WindowPhone的应用,桌面程序等(当然也可以使用Sqlite)。下面通过一个例子介绍如何使用EF Code First生成SQL Compact数据库。
1. 在程序中引用Entity Framework for SQL Compact相关DLL,可以通过Nuget,命令:PM> Install-Package EntityFramework.SqlServerCompact (注意如果需要生成SQL Compact 3.5,Nuget命令:Install-Package EntityFramework.SqlServerCompact.Legacy)
2. 项目结构:Models中存放的是数据库实体类(Actor.cs/FilmActorRole.cs/FilmGenere.cs/FilmTitle.cs/Producer.cs/Role.cs),Context中存放数据库上下文(DvdContext.cs)。因为是一个Demo,就把这些放在一个工程下面。在真实项目中,建议把Models/Context分别放在不同的类库中,这样便于维护,程序的结构也更加清晰。

下面展示一下FilmActorRole类,程序中使用EntityFramework DataAnnotations的方式来描述Model类,
[Table("FilmActorRole")]
public class FilmActorRole
{
[Key]
public int Id { get; set; }
[Required]
public int FilmTitleId { get; set; }
[ForeignKey("FilmTitleId")]
public FilmTitle FileTitle { get; set; }
[Required]
public int ActorId { get; set; }
[ForeignKey("ActorId")]
public Actor Actor { get; set; }
[Required]
public int RoleId { get; set; }
[ForeignKey("RoleId")]
public Role Role { get; set; }
[Required]
[StringLength()]
public string Character { get; set; }
[Required]
[StringLength()]
public string Description { get; set; }
}
关于EntityFramework DataAnnotations的内容,请参考:https://msdn.microsoft.com/en-us/data/jj591583.aspx
DvdContext.cs
public class DvdContext : DbContext
{
public DbSet<Actor> Actors{ get; set; } public DbSet<FilmActorRole> FilmActorRoles { get; set; } public DbSet<FilmGenere> FilmGeneres { get; set; } public DbSet<FilmTitle> FilmTitles { get; set; } public DbSet<Producer> Producers { get; set; } public DbSet<Role> Roles { get; set; } public DvdContext()
:base("DvdConnectionString")
{ }
}
在App.config中需要配置DvdConnectionString,
<connectionStrings>
<add name="DvdConnectionString" connectionString="Data source=|DataDirectory|DvdDatabase.sdf;" providerName="System.Data.SqlServerCe.4.0"/>
</connectionStrings>
上面的配置文件中有一个DataDirectory,这表示数据库存放的目录。通常情况下会把数据库放置在一个特殊位置,例如用户文件夹下,这样在程序卸载时不会被删除掉。我们需要在程序启动时,设置DataDirectory,例如:
static void Main(string[] args)
{
// 设置Database的位置:
AppDomain.CurrentDomain.SetData("DataDirectory", Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData));
}
下面看如何生成当前数据库:
using (DvdContext db = new DvdContext())
{
if(!db.Database.Exists())
{
db.Database.Create();
}
}
我们可以使用LINQ的方式对数据库进行增删改查操作。
感谢您的阅读,代码点击这里下载。
Entity Framework Code First for SQL Compact的更多相关文章
- Entity Framework Code First执行SQL语句、视图及存储过程
1.Entity Framework Code First查询视图 Entity Framework Code First目前还没有特别针对View操作的方法,但对于可更新的视图,可以采用与Table ...
- Entity Framework Code First学习系列目录
Entity Framework Code First学习系列说明:开发环境为Visual Studio 2010 + Entity Framework 5.0+MS SQL Server 2012, ...
- Entity Framework Code First学习系列
Entity Framework Code First学习系列目录 Entity Framework Code First学习系列说明:开发环境为Visual Studio 2010 + Entity ...
- Entity Framework Code First+SQL Server,改变聚集索引,提高查询性能
.net Entity Framework(调研的是Entity Framework 4.0) code first方式生成数据库时,不能修改数据库表的索引,而SQLServer默认会把数据表的主键设 ...
- Entity Framework Code First数据库连接
1. 安装Entity Framework 使用NuGet安装Entity Framework程序包:工具->库程序包管理器->程序包管理器控制台,执行以下语句: PM> Insta ...
- Entity Framework Code First属性映射约定
Entity Framework Code First与数据表之间的映射方式有两种实现:Data Annotation和Fluent API.本文中采用创建Product类为例来说明tity Fram ...
- Entity Framework Code First关系映射约定
本篇随笔目录: 1.外键列名默认约定 2.一对多关系 3.一对一关系 4.多对多关系 5.一对多自反关系 6.多对多自反关系 在关系数据库中,不同表之间往往不是全部都单独存在,而是相互存在关联的.两个 ...
- Entity Framework Code First使用DbContext查询
DbContext.DbSet及DbQuery是Entity Framework Code First引入的3个新的类,其中DbContext用于保持数据库会话连接,实体变化跟踪及保存,DbSet用于 ...
- Entity Framework Code First添加修改及删除单独实体
对于一个单独实体的通常操作有3种:添加新的实体.修改实体以及删除实体. 1.添加新的实体 Entity Framework Code First添加新的实体通过调用DbSet.Add()方法来实现. ...
随机推荐
- 一次Android脱壳training
一.查壳 jeb载入发现没有代码,怀疑加壳 用查壳工具查壳 (爱加密) apktool解包 得到其 package name: loading.androidmanual main activity ...
- iOS关于UILabel 基本属性 背景图片 背景色
[代码] iOS关于UILabel 基本属性 背景图片 背景色 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ...
- 【GoLang】GoLang 的流程与函数
003.GO流程与函数 1 概述 1.1 Go中流程控制分三大类:条件判断,循环控制和无条件跳转 2 流程 2.1 if 2.1.1 if条件判断语句中不需要括号 2.1.2 条件判断语句里面允许声明 ...
- 五步搞定Android开发环境部署——非常详细的Android开发环境搭建教程
在windows安装Android的开发环境不简单也说不上算复杂,本文写给第一次想在自己Windows上建立Android开发环境投入Android浪潮的朋友们,为了确保大家能顺利完成开发环境的搭 ...
- Angularjs与bootstrap.datetimepicker结合实现日期选择器
http://www.lovelucy.info/angularjs-best-practices.html http://damoqiongqiu.iteye.com/blog/1917971 ht ...
- POJ 1068
http://poj.org/problem?id=1068 这道题是一道模拟的题目 题目大意呢,p代表前面的'('的个数,而w代表这个括号所包括的括号的个数: 给你p,要你求w: 解题思路: 首先, ...
- trap
http://blog.csdn.net/elbort/article/details/8525599 http://mywiki.wooledge.org/SignalTrap
- cpu和io进程调度时间
[题目] 在一个单CPU的计算机系统中,有两台外部设备R1.R2和三个进程P1.P2.P3.系统采用可剥夺式优先级的进程调度方案,且所有进程可以并行使用I/O设备,三个进程的优先级.使用设备的先后顺序 ...
- nyoj298_点的变换_错误
点的变换 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 平面上有不超过10000个点,坐标都是已知的,现在可能对所有的点做以下几种操作: 平移一定距离(M),相对X ...
- 【processing】小代码
今天无意间发现的processing 很有兴趣 实现很简洁 void setup(){ } void draw(){ background(); && mouseY > heig ...