Entity Framework -- 添加,删除,修改,关系依附,关系摘除,验证操作
数据库模型

这个基本上是浓缩 Jerry Tom博客的内容,作为参考http://www.cnblogs.com/mbailing/archive/2012/07/31/2616779.html
说明以后再写。
城市实体类
public partial class city
{
public int ID { get; set; }
[MaxLength(100)]
[RegularExpression(@"^[a-zA-Z''-'\s]{1,40}$")]
public string Name { get; set; }
public string CountryCode { get; set; }
public string District { get; set; }
public int Population { get; set; }
public virtual country country { get; set; }
//这个field临时添加,并没有在数据库中映射
[CustomValidation(typeof(BusinessValidations), "DescriptionRules")]
public string Description { get; set; }
}
国家实体类
public partial class country
{
public country()
{
this.cities = new List<city>();
}
public string Code { get; set; }
public string Name { get; set; }
public string Continent { get; set; }
public string Region { get; set; }
public float SurfaceArea { get; set; }
public Nullable<short> IndepYear { get; set; }
public int Population { get; set; }
public Nullable<float> LifeExpectancy { get; set; }
public Nullable<float> GNP { get; set; }
public Nullable<float> GNPOld { get; set; }
public string LocalName { get; set; }
public string GovernmentForm { get; set; }
public string HeadOfState { get; set; }
public Nullable<int> Capital { get; set; }
public string Code2 { get; set; }
public virtual ICollection<city> cities { get; set; }
}
自定义验证类
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
namespace EFEntity.Validation
{
public static class BusinessValidations
{
public static ValidationResult DescriptionRules(string value)
{
var errors = new System.Text.StringBuilder();
if (value != null)
{
var description = value as string;
if (description.Contains("!"))
{
errors.AppendLine("Description should not contain '!'.");
}
if (description.Contains(":)") || description.Contains(":("))
{
errors.AppendLine("Description should not contain emotions.");
}
}
if (errors.Length > 0)
return new ValidationResult(errors.ToString());
else
return ValidationResult.Success;
}
}
}
各种静态方法操作全在Controller.cs文件
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EFEntity.Models;
namespace EFEntity
{
class Controller
{
/// <summary>
/// 添加一个实体
/// </summary>
/// <returns></returns>
public static int AddEntity()
{
using (var context = new worldContext())
{
var newCity = new city
{
CountryCode = "CHN",
District = "Guangdong",
Name = "珠海",
Population = 10000000
};
context.cities.Add(newCity);
return context.SaveChanges();
}
}
/// <summary>
/// 同时添加和修改实体
/// </summary>
/// <returns></returns>
public static int MakeMultipleChanges()
{
using (var context = new worldContext())
{
var niagaraFalls = new city
{
Name = "Niagara Falls",
CountryCode = "USA",
District = "California",
Population = 12232
};
context.cities.Add(niagaraFalls);
var query = (from d in context.cities
where d.Name == "广州"
select d).First();
query.Name = "惠州";
return context.SaveChanges();
}
}
/// <summary>
/// 删除一个实体
/// </summary>
/// <returns></returns>
public static int DeleteCity()
{
using (var context = new worldContext())
{
var oldCity = (from d in context.cities
where d.Name == "珠海"
select d).Single();
context.cities.Remove(oldCity);
return context.SaveChanges();
}
}
/// <summary>
/// 级联删除一个实体(国家)和它相关联的从表实体(城市)
/// </summary>
/// <returns></returns>
public static int DeleteUsaAndCities()
{
using (var context = new worldContext())
{
var countryUSA = (from d in context.countries
where d.Name == "United States"
select d).Single();
context.Entry(countryUSA).Collection(d => d.cities).Load();
context.countries.Remove(countryUSA);
return context.SaveChanges();
}
}
/// <summary>
/// 找到返回一个实体,找不到添加并返回一个实体
/// </summary>
public static void FindOrAddCity()
{
using (var context = new worldContext())
{
var newCity = context.cities.FirstOrDefault(p => p.Name == "湛江");
if (newCity == null)
{
newCity = context.cities.Add(new city
{
Name = "湛江",
CountryCode = "CHN",
District = "Guangdong",
Population = 100
});
context.SaveChanges();
}
Console.WriteLine("增加或找到的城市为:" + newCity.Name);
}
}
/// <summary>
/// 创建从表实体,并依附到主表实体,建立关联。
/// </summary>
/// <returns></returns>
public static int NewRelationData()
{
using (var context = new worldContext())
{
var newcity = new city
{
Name = "随便什么城市",
CountryCode = "CHN", //这个属性值后来还是变成为ZWE,
//说明我们在Country加载后覆盖了这个值。
District = "Guangdong",
Population = 1231232
};
context.cities.Add(newcity);
var countryChina = (from d in context.countries
where d.Code == "ZWE"
select d).Single();
countryChina.cities.Add(newcity);
return context.SaveChanges();
}
}
/// <summary>
/// 修改从表实体的依附关系
/// </summary>
/// <returns></returns>
public static int ChangeRelationData()
{
using (var context = new worldContext())
{
var oldCity = (from c in context.cities
where c.Name == "湛江"
select c).Single();
var oldCountry = (from d in context.countries
where d.Code == "ZWE"
select d).Single();
oldCity.country = oldCountry;
return context.SaveChanges();
}
}
/// <summary>
/// 检查修改状态
/// </summary>
public static void ManualDetectChanges()
{
using (var context = new worldContext())
{
context.Configuration.AutoDetectChangesEnabled = false;
var countryAFG = (from d in context.countries
where d.Name == "Afghanistan"
select d).Single();
countryAFG.SurfaceArea = 1000000;
Console.WriteLine("Before DetectChanges: {0}", context.Entry(countryAFG).State);
context.ChangeTracker.DetectChanges();
Console.WriteLine("After DetectChanges: {0}", context.Entry(countryAFG).State);
}
}
/// <summary>
/// 验证通用方法
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="input"></param>
public static void ConsoleValidateResult<T>(T input) where T : class
{
using (var context = new worldContext())
{
if (context.Entry(input).GetValidationResult().IsValid)
{
Console.WriteLine("----Valid 验证通过!");
}
else
{
Console.WriteLine("----Invalid 验证不通过!");
}
}
}
/// <summary>
/// 验证实体
/// </summary>
public static void ValidateCity()
{
//-------------------------------------
Console.WriteLine("\n验证最大长度");
ConsoleValidateResult<city>(
new city
{
Name = "3412ieiorjteiwjlkrj0943u5094tiroejiktjfgkjfdklsjgdsfddfgfdgfdlksdfs",
CountryCode = "CHN",
District = "Guangdong",
Population = 122
});
//-------------------------------------
Console.WriteLine("\n验证正则表达式");
ConsoleValidateResult<city>(
new city
{
Name = "BeiJingCity",
CountryCode = "CHN",
District = "直辖市",
Population = 100
});
//-------------------------------------
Console.WriteLine("\n验证自定义的规则,这里是Description不能有某些字符串");
ConsoleValidateResult<city>(
new city
{
Name = "Guangzhou", //这里不能是汉字,要不然通不过正则表达式验证
CountryCode = "CHN",
District = "Guangdong",
Population = 100,
Description = "This is the description."
});
}
/// <summary>
/// 于请求中验证属性(Validating Individual Properties on Demand)
/// </summary>
public static void ValidatePropertyOnDemand()
{
var cityItem = new city
{
Name = "Beijing",
CountryCode = "CHN",
District = "直辖市",
Population = 100,
Description = "我爱北京天安门,Shit!"
};
using (var context = new worldContext())
{
var errors = context.Entry(cityItem).Property(p => p.Description).GetValidationErrors();
Console.WriteLine();
Console.WriteLine("#Description 验证错误; {0}",errors.Count());
}
}
}
}
Entity Framework -- 添加,删除,修改,关系依附,关系摘除,验证操作的更多相关文章
- Entity framework 绑定到Datagridview的添加删除修改
Entity framework 绑定到Datagridview的添加删除修改 using System; using System.Collections.Generic; using System ...
- Entity Framework Code First主外键关系映射约定
本篇随笔目录: 1.外键列名默认约定 2.一对多关系 3.一对一关系 4.多对多关系 5.一对多自反关系 6.多对多自反关系 在关系数据库中,不同表之间往往不是全部都单独存在,而是相互存在关联的.两个 ...
- 【极力分享】[C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例【转载自https://segmentfault.com/a/1190000004152660】
[C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例 本文我们来学习一下在Entity Framework中使用Cont ...
- [C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例
本文我们来学习一下在Entity Framework中使用Context删除多对多关系的实体是如何来实现的.我们将以一个具体的控制台小实例来了解和学习整个实现Entity Framework 多对多关 ...
- SQL语句添加删除修改字段及一些表与字段的基本操作
用SQL语句添加删除修改字段 1.增加字段 alter table docdsp add dspcode char(200)2.删除字段 ALTER TABLE table_NA ...
- JavaScript学习 - 基础(八) - DOM 节点 添加/删除/修改/属性值操作
html代码: <!--添加/删除/修改 --> <div id="a1"> <button id="a2" onclick=&q ...
- JTree 添加 , 删除, 修改
package com.swing.demo; import java.awt.BorderLayout; import java.awt.Container; import java.awt.eve ...
- 用SQL语句添加删除修改字段、一些表与字段的基本操作、数据库备份等
用SQL语句添加删除修改字段 1.增加字段 alter table docdsp add dspcode char(200) 2.删除字段 ALTER TABLE table_NAME DROP CO ...
- SQL语句添加删除修改字段[sql server 2000/2005]
用SQL语句添加删除修改字段1.增加字段 alter table docdsp add dspcodechar(200)2.删除字段 ALTER TABLE table_NAME ...
- SQL语句添加删除修改字段
用SQL语句添加删除修改字段1.增加字段 alter table docdsp add dspcodechar(200)2.删除字段 ALTER TABLE table_NAME ...
随机推荐
- WING IDE 快捷键
工欲善其事必先利其器,所以我们无论使用什么编译器,都要熟悉一些快捷键. Ctrl+N新建文件 Ctrl+O 打开文件夹 Ctrl+W 关闭当前文件 Ctrl+S 保存文件 Ctrl+shif+S 另存 ...
- C# DataTable扩展方法
在日常搬砖中,总结了一些简单的扩展方法. public static bool IsNullOrEmpty(this DataTable dt) { ; } public static bool Is ...
- CentOS / RHEL 7 : Chrony V/s NTP (Differences Between ntpd and chronyd)
CentOS / RHEL 7 : Chrony V/s NTP (Differences Between ntpd and chronyd) Chosing between Chrony and N ...
- 洛谷——P1183 多边形的面积
P1183 多边形的面积 多边形求面积公式: $\frac {\sum_{i=0}^{n-1}(x_iy_{i+1}-y_ix_{i+1})}{2}$ #include<bits/stdc++. ...
- Luogu P1629 邮递员送信
P1629 邮递员送信 题目描述 有一个邮递员要送东西,邮局在节点1.他总共要送N-1样东西,其目的地分别是2~N.由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有M条道路,通过每条道路需要 ...
- web前端学习总结--CSS
CSS 什么是CSS? CSS 指层叠样式表(Cascading Style Sheets) 样式定义如何显示HTML元素 样式通常存储在样式表中 如何使用CSS 内联方式 样式定义在单个的HTML元 ...
- VS单元测试"未能加载文件或程序集,或它的某一个依赖项"
Autofac.Core.DependencyResolutionException : An error occurred during the activation of a particular ...
- .Net防sql注入的方法总结
#防sql注入的常用方法: 1.服务端对前端传过来的参数值进行类型验证: 2.服务端执行sql,使用参数化传值,而不要使用sql字符串拼接: 3.服务端对前端传过来的数据进行sql关键词过来与检测: ...
- [bzoj1855][Scoi2010]股票交易_动态规划_单调队列
股票交易 bzoj-1855 Scoi-2010 题目大意:说不明白题意系列++...题目链接 注释:略. 想法:这个题还是挺难的. 动态规划没跑了 状态:dp[i][j]表示第i天手里有j个股票的最 ...
- [bzoj3061][Usaco13Feb]Partitioning the Farm_动态规划_状压dp
Partitioning the Farm bzoj-3061 Usaco13Feb 题目大意:给定一个n*n的方格图,用k条贯穿方格图的直线将整个方格图分割,使得每一块的权值和的最大值最小. 注释: ...