EntityFramework Core笔记:表结构及数据基本操作(2)
1. 表结构操作
1.1 表名
Data Annotations:
using System.ComponentModel.DataAnnotations.Schema;
[Table("Role")]
public class Role
{
// ...
}
FluentAPI:
using Microsoft.EntityFrameworkCore;
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Role>().ToTable("Role");
}
1.2 字段
Data Annotations:
using System;
using System.Collections.Generic;
using System.Text; using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; namespace Libing.App.Models.Entities
{
[Table("Role")]
public class Role
{
[Column("RoleID")]
public int RoleID { get; set; } [Required]
[Column("RoleName",TypeName = "varchar(200)")]
public string RoleName { get; set; }
}
}
FluentAPI:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Role>().ToTable("Role");
modelBuilder.Entity<Role>()
.Property(t => t.RoleID)
.HasColumnName("RoleID");
modelBuilder.Entity<Role>()
.Property(t => t.RoleName)
.HasColumnName("RoleName")
.HasColumnType("varchar(200)")
//.HasMaxLength(200)
.IsRequired();
}
1.3 主键
Data Annotations:
[Table("Role")]
public class Role
{
[Key]
public int RoleID { get; set; }
}
FluentAPI:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Role>()
.HasKey(t => t.RoleID); // 复合主键
//modelBuilder.Entity<Role>()
// .HasKey(t => new { t.RoleID, t.RoleName });
}
1.4 计算列
FluentAPI:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<User>()
.Property(t => t.DisplayName)
.HasComputedColumnSql("[LastName] + ',' + [FirstName]");
}
CREATE TABLE [Users] (
[UserID] int NOT NULL IDENTITY,
[DisplayName] AS [LastName] + ',' + [FirstName],
[FirstName] nvarchar(max) NULL,
[LastName] nvarchar(max) NULL,
CONSTRAINT [PK_Users] PRIMARY KEY ([UserID])
);
1.5 生成值
主键属性如果是整数或Guid类型,该属性将会被EntityFramework Core设置为自动生成。
Data Annotations:
(1)没有生成值
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int RoleID { get; set; }
(2)添加操作生成值
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int RoleID { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public DateTime ModifiedDate { get; set; }
(3)添加或修改操作生成值
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime ModifiedDate { get; set; }
FluentAPI:
modelBuilder.Entity<Role>()
.Property(t => t.RoleID)
.ValueGeneratedOnAdd();
modelBuilder.Entity<Role>()
.Property(t => t.ModifiedDate)
.ValueGeneratedNever();
modelBuilder.Entity<Role>()
.Property(t => t.ModifiedDate)
.ValueGeneratedOnAdd();
modelBuilder.Entity<Role>()
.Property(t => t.ModifiedDate)
.ValueGeneratedOnAddOrUpdate();
注:按照约定,非复合主键的类型 short、 int、 long、 或 Guid 将安装程序能够生成上添加的值。
所有其他属性将与不值生成的安装程序。
1.6 默认值
modelBuilder.Entity<Role>()
.Property(t => t.RoleName)
.HasDefaultValue(String.Empty);
modelBuilder.Entity<Role>()
.Property(t => t.ModifiedDate)
.HasDefaultValueSql("GETDATE()");
CREATE TABLE [Role] (
[RoleID] int NOT NULL IDENTITY,
[ModifiedDate] datetime2 NOT NULL DEFAULT (GETDATE()),
[RoleName] varchar(200) NOT NULL DEFAULT N'',
CONSTRAINT [PK_Role] PRIMARY KEY ([RoleID])
);
1.7 序列
modelBuilder.HasSequence<int>("RoleSequence", "dbo")
.StartsAt()
.IncrementsBy();
modelBuilder.Entity<Role>()
.Property(t => t.RoleID)
.HasDefaultValueSql("NEXT VALUE FOR dbo.RoleSequence");
CREATE SEQUENCE [dbo].[RoleSequence] AS int START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE;
CREATE TABLE [dbo].[Role] (
[RoleID] int NOT NULL DEFAULT (NEXT VALUE FOR dbo.RoleSequence),
[ModifiedDate] datetime2 NOT NULL,
[RoleName] varchar(200) NOT NULL,
CONSTRAINT [PK_Role] PRIMARY KEY ([RoleID])
);
1.8 索引
modelBuilder.Entity<Role>()
.HasIndex(t => t.RoleName)
.HasName("IX_RoleName");
CREATE INDEX [IX_RoleName] ON [dbo].[Role] ([RoleName]);
modelBuilder.Entity<Role>()
.HasIndex(t => t.RoleName)
.IsUnique()
.HasName("IX_RoleName");
CREATE UNIQUE INDEX [IX_RoleName] ON [dbo].[Role] ([RoleName]);
1.9 默认架构
modelBuilder.HasDefaultSchema("dbo");
1.10 完整实体类配置
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Role>(entity =>
{
// Primary Key
entity.HasKey(t => t.RoleID); // Properties
entity.Property(t => t.RoleName).HasMaxLength(); // Table & Column Mappings
entity.ToTable("Role", "dbo");
entity.Property(t => t.RoleID).HasColumnName("RoleID");
entity.Property(t => t.RoleName).HasColumnName("RoleName");
});
}
RoleConfiguration.cs
using System;
using System.Collections.Generic;
using System.Text; using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders; using Libing.App.Models.Entities; namespace Libing.App.Models.Configurations
{
public class RoleConfiguration : IEntityTypeConfiguration<Role>
{
public void Configure(EntityTypeBuilder<Role> builder)
{
// Primary Key
builder.HasKey(t => t.RoleID); // Properties
builder.Property(t => t.RoleName)
.IsRequired()
.HasMaxLength(); // Table & Column Mappings
builder.ToTable("Role", "dbo");
builder.Property(t => t.RoleID).HasColumnName("RoleID");
builder.Property(t => t.RoleName).HasColumnName("RoleName");
}
}
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.ApplyConfiguration(new RoleConfiguration());
}
2. 表数据操作
EntityFramework Core笔记:表结构及数据基本操作(2)的更多相关文章
- sqlserver删除所有表(表结构和数据)
要删除某个数据库,或者删除数据库中的所有表(删除表结构和数据),需要先删除表间的外键约束,才能删除表.如删除数据库db_wy中的所有表: --/第1步**********删除所有表的外键约束***** ...
- SQL Server表结构和数据导入到MySQL
借助的工具:Navicat for MySQL,链接:http://pan.baidu.com/s/1kVCw8IF 密码:g927 可以很明确的肯定,主键和自增列是没办法导入的,只能是表结构和数据. ...
- Oracle备份表结构和数据
--创建一份表结构 create table BASE_GOODSPAYMENT_SETTING_BAK as select * from BASE_GOODSPAYMENT_SETTING ; -- ...
- MySQL 如何只导出 指定的表 的表结构和数据 ( 转 )
MySQL 如何只导出 指定的表 的表结构和数据 ( 转 ) 2011-01-04 15:03:33 分类: MySQL MySQL 如何只导出 指定的表 的表结构和数据 导出更个库的表结构如下:my ...
- 复制表结构和数据SQL语句
select * into 目标表名 from 源表名 insert into 目标表名(fld1, fld2) select fld1, 5 from 源表名 以上两句都是将 源表 的数据插入到 目 ...
- SQL复制表结构和数据
1.复制表结构和数据 select * into 目的数据库名.dbo.目的表名 from 原表名 select * into my0735home.dbo.infoMianTest from inf ...
- SQL——表结构或数据的复制
一.复制表结构及数据到新表 create table new_tb select * from old_tb 二.只复制表结构到新表 create table new_tb select * from ...
- orcale复制表结构及其数据
http://hi.baidu.com/tag/Oracle/feeds http://hi.baidu.com/gqftuisidibabiq/item/14d306cc87cbdf45bcef69 ...
- Oracle复制表结构及数据
1. 复制表结构及其数据: create table table_name_new as select * from table_name_old 2. 只复制表结构: ; 或者: create ...
随机推荐
- JS截取数字
Math是javascript的一个内部对象,该对象的方法主要是一些数学计算方法floor:下退 Math.floor(12.9999) = 12ceil:上进 Math.ceil(12.1) = 1 ...
- 4. 带有延迟时间的Queue(DelayQueue)
package com.gf.conn013; import java.util.concurrent.DelayQueue; /** * DelayQueue: 带有延迟时间的Queue,其中的元素 ...
- Maven(十二)Maven 依赖详解
依赖的传递性 注意1:在Eclipise创建的Maven项目,若依赖eclipse空间中其他自己创建的 的项目时,此时并不会报错,但是当执行mvn compile命令时还是会显示缺失败.所以依赖的其他 ...
- 当input框输入到限定长度时,自动focus下一个input框
需求背景 需要输入一串15位的数字,但是要分为3个输入框,每个输入框限定长度5位,当删除当前输入框的内容时,focus到上一个输入框: 实现方法 var field = $('.phone-fiel ...
- JavaScript知识点 思维导图
javascript变量 javascript数据类型 javascript运算符 javascript流程语句 javascript数组 javascript字符串函数 javascript函数基础 ...
- SAP MM 事务代码MI31之思考
SAP MM 事务代码MI31之思考 1 - MI01之痛 多年SAP项目实施实践中,笔者之前对于SAP系统里盘点凭证创建(MI01)事务代码里的输入界面很是不爽: 第一,MI01输入了一行数据以后, ...
- Python常用模块:datetime
使用前提: >>> from datetime import datetime 常见用法: 1.获取当前日期和时间 >>> now = datetime.now() ...
- Android 网络框架 Retrofit2
概述 Retrofit是一个OkHttp网络请求框架的封装库,Retrofit通过注解配置网络参数,可以按照我们的规则去构造实际的HTTP请求,能够灵活设置URL.头部.请求体.返回值等,是目前最优雅 ...
- Android 异步框架 RxJava2
观察者模式的概念 RxJava是android的异步框架,官方介绍是可观测的序列,组成异步基于事件程序的库.特点是观察者模式,基于事件流的链式调用,随着异步操作调度过程复杂的情况下,程序逻辑也变得越来 ...
- QT 启动shell脚本
1.QProcess *p = new QProcess(this); 2.QString str = qApp->applicationDirPath() + "/update.sh ...