• 关于EF的一个简单Demo


     
    中华民国C#交流群
     今天使用EF的时候很奇怪的问题,添加属性后,使用程序包管理器控制台的NuGet命令更新无效,于是做了这个测试,一次性写好,自动更新,看看效果
    1.首先建立一个MVC项目



    2.我们选择Internet应用程序模板
     
     
    3.确保程序引入了EF程序集,如果没有可以使用管理NuGet程序包联机下载最新版本的EntityFramework【也可以外部引用加载,但是由于使用的是CodeFirst模式,因此最低版本要求4.1】




     
    4.为了简单演示我吧所有的需要创建类都放在一个文件里,代码如下
    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.Data.Entity;
    using System.Data.Entity.ModelConfiguration.Conventions;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    
    namespace ProductsEFDemo.Models
    {
       public partial class Product
       {
           [HiddenInput(DisplayValue = false)]
           public int ProductID { get; set; }
    
           [Required(ErrorMessage = "Please enter a product name")]
           public string Name { get; set; }
    
           [Required(ErrorMessage = "Please enter a description")]
           [DataType(DataType.MultilineText)]
           public string Description { get; set; }
    
           [Required]
           [Range(0.01, double.MaxValue, ErrorMessage = "Please enter a positive price")]
           public decimal Price { get; set; }
    
           [Required(ErrorMessage = "Please specify a category")]
           public string Category { get; set; }
    
           public byte[] ImageData { get; set; }
    
           [HiddenInput(DisplayValue = false)]
           public string ImageMimeType { get; set; }
       }
    
       public class ProductContext : DbContext
       {
           public DbSet<Product> Products { get; set; }
    
           protected override void OnModelCreating(DbModelBuilder modelBuilder)
           {
               modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
           }
       }
    
       public class ProductsInitializer : DropCreateDatabaseIfModelChanges<ProductContext>
       {
           protected override void Seed(ProductContext context)
           {
               var products = new List<Product> {
                   new Product{ Name="袜子", Description="黑丝袜", Category="生活用品",Price=110m},
                   new Product{ Name="鞋子", Description="大头皮鞋", Category="生活用品", Price=125m},
                   new Product{ Name="手表", Description="瑞士金表", Category="装饰品 ", Price=135.5m}
               };
               products.ForEach(p => context.Products.Add(p));
               context.SaveChanges();
           }
       }
    }
    由于我们此处覆盖了ProductContext默认的播种方法即数据的初始化方法,因此要重新注册这个DropCreateDatabaseIfModelChanges的子类
    
    配置连接字符串【这里我使用VS2012自带的LocalDB数据库】
    <connectionStrings>
       <add name="ProductContext" connectionString="Data Source=(localdb)v11.0;Initial Catalog=ProductDB;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|ProductDB.mdf" providerName="System.Data.SqlClient" />
     </connectionStrings>
     
    5.我仅仅为了测试定义使用现有的HomeController中的Index方法,并添加了一个Edit方法开查看System.ComponentModel.DataAnnotations在定义的类中所起的作用是否有效,为了测试没有什么DI这类的概念,代码如下:
     
    private ProductContext context = new ProductContext();
    
          public ViewResult Index()
          {
              return View(context.Products);
          }
    
          public ActionResult Edit(int productId)
          {
              var product = context.Products.FirstOrDefault(p => p.ProductID == productId);
              return View(product);
          }
    6、创建两个强类型的视图





    7.运行查看效果





    8、程序正常,我们添加一个无关紧要的测试属性
     
    10、不使用NuGet控制台命令直接运行程序,一切正常,自动生成和更新的表如下:
     
    11.总结:NetGet命令有时候固然很重要,但是要是用不好,可能在进行数据库迁移的时候让你蛋碎的一地,所以如果你不熟悉可以手动建表或许更加高效和稳定。Over!

    下面是用命令控制更新的演示,可以不用看
    ===============================================================
  • 相关阅读:
    查看数据表的信息
    HR面试必问:你什么时候能到岗?聪明人都这样回答
    42种常见的HTTP响应代码
    Ubuntu环境下微信界面中间显示黑框和字体显示为白框等问题
    C# 开发电子印章制作工具 -- 附下载程序
    ofd文件拆分合并思路探索 -- 附下载程序
    利用防火墙出站规则解决Adobe Rader XI闪退问题
    记一次 Aximp.exe工具的使用
    MacOS Monterey 一键重置系统
    macbook m1 键盘进灰导致个别按键不灵敏解决方法
  • 原文地址:https://www.cnblogs.com/rohelm/p/3167251.html
Copyright © 2020-2023  润新知