Entity Framework -- 添加,删除,修改,关系依附,关系摘除,验证操作

数据库模型

image

 

这个基本上是浓缩 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());
            }
        }
    }
}
posted @ 2013-09-19 06:47  grkin  阅读(625)  评论(0编辑  收藏  举报