C# My.saveChanges()方法未保存,因为它表示非静态字段、方法或属性需要对象引用

C# My.saveChanges()方法未保存,因为它表示非静态字段、方法或属性需要对象引用,c#,asp.net-mvc,entity-framework,non-static,C#,Asp.net Mvc,Entity Framework,Non Static,调用.SaveChanges()时出错。它告诉我非静态字段、方法或属性“SongDatabase.Songs”需要对象引用。这是我的控制器代码。有人能告诉我为什么会发生这种错误吗 [HttpPost] public ActionResult Add(Song song) { using (SongDatabase db = new SongDatabase()) { SongDatabase.Songs.Add(song);

调用.SaveChanges()时出错。它告诉我非静态字段、方法或属性“SongDatabase.Songs”需要对象引用。这是我的控制器代码。有人能告诉我为什么会发生这种错误吗

[HttpPost]
    public ActionResult Add(Song song)
    {
        using (SongDatabase db = new SongDatabase())
        {
            SongDatabase.Songs.Add(song);
            SongDatabase.SaveChanges();
        }

        return RedirectToAction("Music");
    }
这是我的歌曲数据库代码

public class SongDatabase : DbContext
{
    public DbSet<Song> Songs { get; set; }
    public DbSet<Artist> Artists { get; set; }
    public DbSet<Album> Albums { get; set; }

    public SongDatabase()
    {
        Database.SetInitializer(new DropCreateDatabaseIfModelChanges<SongDatabase>());
    }
}
公共类数据库:DbContext
{
公共DbSet歌曲{get;set;}
公共数据库集艺术家{get;set;}
公共数据库集相册{get;set;}
公共数据库()
{
SetInitializer(新的DropCreateDatabaseIfModelChanges());
}
}
最后,这是我的歌曲课的代码

public class Song
{
    public Song()
    {
        Album = new List<Album>();
    }

    /// <summary>
    ///  The Id of the song.
    /// </summary>
    public int SongId { get; set; }

    /// <summary>
    ///  The name of the song.
    /// </summary>
    public string SongName { get; set; }

    /// <summary>
    /// The artist of the song.
    /// </summary>
    public int ArtistId { get; set; }

    /// <summary>
    ///  The duration of the song.
    /// </summary>
    public double Duration { get; set; }

    /// <summary>
    ///  Whether or not this song should be excluded when calculating the total duration of the current playlist. 
    /// </summary>
    public bool Exclude { get; set; }

    /// <summary>
    /// Navigation property linking the album class to the song class.
    /// </summary>
    public virtual ICollection<Album> Album { get; set; }

    /// <summary>
    /// Navigation property linking the artist class to the song class.
    /// </summary>
    public virtual Artist Artist { get; set; }
}
公共类歌曲
{
公歌()
{
相册=新列表();
}
/// 
///歌曲的Id。
/// 
public int SongId{get;set;}
/// 
///这首歌的名字。
/// 
公共字符串SongName{get;set;}
/// 
///这首歌的作者。
/// 
公共int ArtistId{get;set;}
/// 
///歌曲的持续时间。
/// 
公共双持续时间{get;set;}
/// 
///计算当前播放列表的总持续时间时,是否应排除此歌曲。
/// 
公共布尔排除{get;set;}
/// 
///将唱片集类链接到歌曲类的导航属性。
/// 
公共虚拟ICollection相册{get;set;}
/// 
///将艺术家类链接到歌曲类的导航属性。
/// 
公共虚拟艺术家{get;set;}
}

您试图在此处的代码中将
公共DbSet Songs{get;set;}
作为静态值访问

[HttpPost]
public ActionResult Add(Song song)
{
    using (SongDatabase db = new SongDatabase())
    {
        SongDatabase.Songs.Add(song);
        SongDatabase.SaveChanges();
    }

    return RedirectToAction("Music");
}
您可以使用
SongDatabase db=new SongDatabase()
创建
SongDatabase
的实例,但您没有使用该实例
db
。你应该把它换成现金

[HttpPost]
public ActionResult Add(Song song)
{
    using (SongDatabase db = new SongDatabase())
    {
        db.Songs.Add(song);
        db.SaveChanges();
    }

    return RedirectToAction("Music");
}

您试图在这里的代码中以静态值访问
公共DbSet Songs{get;set;}

[HttpPost]
public ActionResult Add(Song song)
{
    using (SongDatabase db = new SongDatabase())
    {
        SongDatabase.Songs.Add(song);
        SongDatabase.SaveChanges();
    }

    return RedirectToAction("Music");
}
您可以使用
SongDatabase db=new SongDatabase()
创建
SongDatabase
的实例,但您没有使用该实例
db
。你应该把它换成现金

[HttpPost]
public ActionResult Add(Song song)
{
    using (SongDatabase db = new SongDatabase())
    {
        db.Songs.Add(song);
        db.SaveChanges();
    }

    return RedirectToAction("Music");
}