MVC Music Sotre -2

 

七、使用EF快速完成CRUD功能

(1)新建Artist,Genre,Album3个类,用属性显示3张表的关联

(2)添加DbContext类(对应数据库),添加DbSet<Model>(对应表) 

 >画出数据库设计图(表、表间关系),手动、UML、SQL的工具均可

  

>添加Album、Genre、Artist类,和DbContext类

    public class DbMusicContext:DbContext //相当于数据库
    {
        public DbSet<Album> Albums { get; set; }  //Album表
        public DbSet<Genre> Genres { get; set; }  //Genre表
    }

 

八、创建DCDIMC派生类,Database.SetInitializer(DCDIMC派生) 创建数据库并录入记录(DCDIMC的功能)

         备注:>SampleData类必须继承DropCreateDatabaseIfModelChanges<T> 类,T是DbContext派生类(在此是DbMusicContext)

                 >DCDIMC类用于将已有数据添加到sdf中.若只关注数据的CRUD操作,八、九可以跳过.

                 (1)Webconfig中连接DbContext类。DataSource和provider Name

                       

  <connectionStrings>
    <!--EF模式下,连接name属性写DbContext类的名称-->
    <add name ="DbContextMusic" connectionString ="Data Source=|DataDirectory|MusicDb.sdf" providerName ="System.Data.SqlServerCe.4.0"/>
  </connectionStrings>

 

(2)添加DCDIMC 派生类,并override seed方法

       

namespace Music.Models
{
    public class SampleData : DropCreateDatabaseIfModelChanges<DbContextMusic>
    {
        protected override void Seed(DbContextMusic context)
        {
            var genres = new List<Genre>
            {
                new Genre { Name = "Rock" },
                new Genre { Name = "Jazz" },
                new Genre { Name = "Metal" },
                new Genre { Name = "Alternative" },
                new Genre { Name = "Disco" },
                new Genre { Name = "Blues" },
                new Genre { Name = "Latin" },
                new Genre { Name = "Reggae" },
                new Genre { Name = "Pop" },
                new Genre { Name = "Classical" }
            };

            var artists = new List<Artist>

 

 (3)在Global.asax中 Database.SetInitilizer( new DCDIMC派生类)

        protected void Application_Start()
        {
            Database.SetInitializer(new SampleData());
            //SetInitializer的参数是  DCDIMC派生类
            //new 数据库初始类名

 

运行效果:

创建了数据库MusicDb.sdf,并且添加了3张表。 在DCDIMC中声明的记录都已录入对应表.(记住,在DbContext中只声明了DbSet<Album>和DbSet<Genre>)

 九、DCDIMC录入数据疑问

DCDIMC的Seed写法(1):

 var genres = new List<Genre>
            {
                new Genre { Name = "Rock" },
                 ....
new Genre { Name = "Classical" } }; var artists = new List<Artist> { new Artist { Name = "Aaron Copland & London Symphony Orchestra" },
.........................
new Artist { Name = "Zeca Pagodinho" } }; var albums = new List<Album> { new Album { Title = "The Best Of Men At Work", Genre = genres.Single(g => g.Name == "Rock"), Price = 8.99M, Artist = artists.Single(a => a.Name == "Men At Work"), AlbumArtUrl = "/Content/Images/placeholder.gif" }, ....
new Album { Title = "Ao Vivo [IMPORT]", Genre = genres.Single(g => g.Name == "Latin"), Price = 8.99M, Artist = artists.Single(a => a.Name == "Zeca Pagodinho"), AlbumArtUrl = "/Content/Images/placeholder.gif" } };

//执行后Album表、Genre表、Artist表都无任何记录

 

Seed写法2:

 var genres = new List<Genre>
            {
                new Genre { Name = "Rock" },
                 ....
new Genre { Name = "Classical" } }; var artists = new List<Artist> { new Artist { Name = "Aaron Copland & London Symphony Orchestra" },
.........................
new Artist { Name = "Zeca Pagodinho" } }; new List<Album> { new Album { Title = "The Best Of Men At Work", Genre = genres.Single(g => g.Name == "Rock"), Price = 8.99M, Artist = artists.Single(a => a.Name == "Men At Work"), AlbumArtUrl = "/Content/Images/placeholder.gif" }, ....
new Album { Title = "Ao Vivo [IMPORT]", Genre = genres.Single(g => g.Name == "Latin"), Price = 8.99M, Artist = artists.Single(a => a.Name == "Zeca Pagodinho"), AlbumArtUrl = "/Content/Images/placeholder.gif" } }.ForEach(a => context.Albums.Add(a));

//尽管只有context.Albums.add(a) ,记录都已经录入3个表.

 十、实现Album的CRUD操作

     (1)添加AlbumController

     (2)向导中选择Model和DbContext  //效果实现

     (3)记忆Controller和Views中生成的代码

 The following sections have been defined but have not been rendered for the layout paged的解决方式:

消除Edit.cshtml中的@setion渲染代码

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值