您的位置:首页 > 其它

关于EF的一个简单Demo

2013-07-02 16:27 405 查看



今天使用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!

下面是用命令控制更新的演示,可以不用看
===============================================================



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: