[LINQ TO SQL]使用LINQ TO SQL创建数据库
这篇博客将介绍如何使用LINQ TO SQL来创建数据库,以及如何映射Table之间的主外键关系。
我们的数据库表关系如下:
Province与City之间1:M,City与Area之间1:M的关系。
下面就通过LINQ TO SQL来创建这样的数据库,以Province表为例,
Province Table:
using System.Collections.Generic;
using System.Data.Linq;
using System.Data.Linq.Mapping; namespace ImportAreaInfoApp.Models
{
[Table(Name = "Province")]
class Province
{
[Column(IsPrimaryKey = true, Name = "Id", IsDbGenerated = true, CanBeNull = false)]
public int Id { get; set; } [Column]
public string Name { get; set; }
}
}
1). 引用System.Data.Linq.Mapping;
2). 给Province类添加Table属性,如果数据库表名与类名一致,可以不设置Table的Name值,会默认使用类名作为数据表的名字;
3). 数据表中列通过Column指定,如果该列为主键,需要设置IsPrimaryKey=true,同样的如果列名与字段名一致,Name可以不指定。
City Table:
using System.Collections.Generic;
using System.Data.Linq;
using System.Data.Linq.Mapping; namespace ImportAreaInfoApp.Models
{
[Table(Name = "City")]
class City
{
[Column(IsPrimaryKey = true, Name = "Id", IsDbGenerated = true, CanBeNull = false)]
public int Id { get; set; } [Column(Name = "Name")]
public string Name { get; set; }
}
}
Area Table:
using System.Collections.Generic;
using System.Data.Linq;
using System.Data.Linq.Mapping; namespace ImportAreaInfoApp.Models
{
[Table(Name = "Area")]
class Area
{
[Column(IsPrimaryKey = true, Name = "Id", IsDbGenerated = true, CanBeNull = false)]
public int Id { get; set; } [Column(Name = "Name")]
public string Name { get; set; }
}
}
到这里,数据表就创建完了。下面创建数据库
using System.Data.Linq;
using System.Data.Linq.Mapping; namespace ImportAreaInfoApp.Models
{
[Database(Name = "ExpressDb")]
class ExpressDbContext : DataContext
{
private const string ConnectionString = @"Data Source=HW-WPF-SER\SQLEXPRESS;Initial Catalog=ExpressDb;Integrated Security=True;"; public Table<Province> Provinces; public Table<City> Cities; public Table<Area> Areas; public ExpressDbContext()
: base(ConnectionString)
{ }
}
}
1). 数据库类需要继承DataContext,并且类名需要添加Database属性,如果数据库名称与类名不一致,需要制定Name值;
2). 数据库所关联的表需要通过Table<Table Class> Tables指出来;
3). 在程序中我们可以通过ExpressDbContext类来操作所属的数据表完成CRUD操作。
创建数据库,
using (ExpressDbContext dbContext = new ExpressDbContext())
{
if (dbContext.DatabaseExists())
{
dbContext.DeleteDatabase();
} dbContext.CreateDatabase();
}
但是数据表之间的关系没有映射。以Province和City为例,对City类做如下修改,
using System.Collections.Generic;
using System.Data.Linq;
using System.Data.Linq.Mapping; namespace ImportAreaInfoApp.Models
{
[Table(Name = "City")]
class City
{
[Column(IsPrimaryKey = true, Name = "Id", IsDbGenerated = true, CanBeNull = false)]
public int Id { get; set; } [Column(Name = "Name")]
public string Name { get; set; } [Column(Name = "Province")]
private int? _provinceId; private EntityRef<Province> _province = new EntityRef<Province>(); [Association(Name = "FK_City_Province", IsForeignKey = true, Storage = "_province", ThisKey = "_provinceId")]
public Province Province
{
get { return _province.Entity; }
set { _province.Entity = value; }
}
}
}
1). 创建一个int?型的私有变量来保存ProvinceId;
2). 创建EntityRef<Province>私有变量来保存City关联的Province;
3). 通过Association来标识关联性;
相应的,对Province类也要做修改,
using System.Collections.Generic;
using System.Data.Linq;
using System.Data.Linq.Mapping; namespace ImportAreaInfoApp.Models
{
[Table(Name = "Province")]
class Province
{
[Column(IsPrimaryKey = true, Name = "Id", IsDbGenerated = true, CanBeNull = false)]
public int Id { get; set; } [Column]
public string Name { get; set; } private EntitySet<City> _cities = new EntitySet<City>(); [Association(Name= "FK_City_Province", Storage = "_cities", OtherKey = "_provinceId", ThisKey = "Id")]
public ICollection<City> Cities
{
get { return _cities; }
set { _cities.Assign(value); }
}
}
}
1). 添加EntitySet<City>私有变量来持有Province相关联的City;
2). 通过Association来完成外键关系匹配;
经过上述代码的修改Province与City之间的1:M关系就建立了。
感谢您的阅读。
[LINQ TO SQL]使用LINQ TO SQL创建数据库的更多相关文章
- ASP.NET实现二维码 ASP.Net上传文件 SQL基础语法 C# 动态创建数据库三(MySQL) Net Core 实现谷歌翻译ApI 免费版 C#发布和调试WebService ajax调用WebService实现数据库操作 C# 实体类转json数据过滤掉字段为null的字段
ASP.NET实现二维码 using System;using System.Collections.Generic;using System.Drawing;using System.Linq;us ...
- Sql语句在SqlServer中创建数据库、表格并添加约束
通过Sql语句来创建数据库与架构 创建数据库 数据库的创建首先是要引用主数据库的,需要在master数据库的环境下进行创建.大致的语法如下: -- 使用master数据库 use master -- ...
- PL/SQL Developer图形化窗口创建数据库(表空间和用户)以及相关查询sql
前言:上一篇安装好oracle和pl/sql后,这篇主要讲如何创建数据库,因为接下来我的项目会连接数据库进行开发. 第一步.先用系统管理员登录pl/sql 我这里系统管理员用户名为system,密码为 ...
- 必须会的SQL语句(一) 创建数据库与删除数据库
1.创建数据库 Create database 名称 on primary { name ='名称', filename ='c:\xx\名称.mdf', size = 10mb ...
- 【SQL server基础】手动创建数据库和表格
use master go if exists(select * from sysdatabases where name='learning') drop database learning go ...
- sql server2008中怎样用sql语句创建数据库和数据表
这是简单用代码实现创建数据库和数据表的sql语句,如下: --调用系统数据库-- use master go /***防止你要创建的数据库同名,先把它删除掉****/ if Exists(select ...
- 使用动态SQL创建数据库
/*其实我也搞不懂为什么要用SQL来创建,明明SQL Server有图形化创建数据库多省事啊!*/USE master; DECLARE @sqlstr nvarchar(max)/*定义一个变量* ...
- C# 读取文件中的sql语句 创建数据库以及表结构
大概思路是: 读取文件 根据文件中行内容为GO 作为分割 一条条放到list中 然后在程序中逐条执行sql语句; 值得一提的是 创建数据库的语句是不允许放到程序事务中执行的 所以目前我是分了两个文本 ...
- Mysql常用sql语句(一)- 操作数据库
21篇测试必备的Mysql常用sql语句,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1683347.html ...
随机推荐
- jdk自带的jvm监测程序
jinfo:可以输出并修改运行时的java 进程的opts. jps:与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号. jstat:一个极强 ...
- div 纯数字很长时无法折行解决
<div style="width:100%;word-wrap:break-word;word-spacing:normal;"> </div> 加上红色 ...
- 【ASP.NET程序员福利】打造一款人见人爱的ORM(二)
上一篇我已经给大家介绍AntORM的框架[ASP.NET程序员福利]打造一款人见人爱的ORM(一),今天就来着重介绍一下如何使用这套框架 1>AntORM 所有成员 如果你只想操作一种数据库,可 ...
- Python 下载 tushare 数据,然后调用 C++ DLL 计算 wMA 存入本地 csv 文件再 python 读取
CMakeLists.txt project(wMA) add_library(wMA SHARED wMA.cpp) wMA.h #pragma once #ifndef WMA_WMA_H #de ...
- xss之渗透测试
跨站脚本攻击:cross site script execution(通常简写为xss,因css与层叠样式表同名,故改为xss),是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用 ...
- qq空间等闪动的文字怎么做?
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- phpcms 添加memcache支持
1,修改caches/configs/cache.php <?php return array ( 'file1' => array ( 'type' => 'file', 'deb ...
- 【Matlab】特征值
特征值 clc;clear; %[V,D]=eig(A) //求取特征值 A=[ 1 2 4; 4 0 7; 9 1 3 ]; [V,D]=eig(A) 结果如下: 求解特征值与特征向量时矩阵必须是方 ...
- 使用jstack分析cpu消耗过高的问题
我们使用jdk自带的jstack来分析.当linux出现cpu被java程序消耗过高时,以下过程说不定可以帮上你的忙: 1.top查找出哪个进程消耗的cpu高 21125 co_ad2 18 ...
- 我的LaTeX中文文档模板
中文LaTeX处理模板 环境MiTex内核 编辑环境WinEdit 源码如下: \documentclass[a4paper,12pt]{article} \usepackage{CJK} %设定字号 ...