ASP.NET MVC4 SQL DB DBContext如何知道要使用哪个表?

时间:2014-06-05 13:57:00

标签: asp.net-mvc sql-server-2008 asp.net-mvc-4 dbcontext

刚开始使用ASP.NET MVC 4.试过这个教程,我能够很好地完成它:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnet-mvc-4

我的问题是在我建立自己与webconfig中现有数据库的连接之后。我得到了它读取我的数据等,但DbContext如何知道要使用哪个表?什么指定表?例如,假设我有两张桌子" Cats"和#34; Dogs",每个都相同,但有不同的数据(虽然相同的字段等)。究竟是什么告诉我的控制器和模型使用" Cats"表?如果我只想将它切换到" Dogs&#34 ;?谢谢!

控制器:

public class MyCatsController : Controller
{
    private MyCatDBContext db = new MyCatDBContext();

    //
    // GET: /MyCats/

    public ActionResult Index()
    {
        return View(db.MyCats.ToList());
    }

    //
    // GET: /MyCats/Details/5

    public ActionResult Details(int id = 0)
    {
        MyCat mycat = db.MyCats.Find(id);
        if (mycat == null)
        {
            return HttpNotFound();
        }
        return View(mycat);
    }

    //
    // GET: /MyCats/Create

    public ActionResult Create()
    {
        return View();
    }

    //
    // POST: /MyCats/Create

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(MyCat mycat)
    {
        if (ModelState.IsValid)
        {
            db.MyCats.Add(mycat);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        return View(mycat);
    }

    //
    // GET: /MyCats/Edit/5

    public ActionResult Edit(int id = 0)
    {
        MyCat mycat = db.MyCats.Find(id);
        if (mycat == null)
        {
            return HttpNotFound();
        }
        return View(mycat);
    }

    //
    // POST: /MyCats/Edit/5

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit(MyCat mycat)
    {
        if (ModelState.IsValid)
        {
            db.Entry(mycat).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        return View(mycat);
    }

    //
    // GET: /MyCats/Delete/5

    public ActionResult Delete(int id = 0)
    {
        MyCat mycat = db.MyCats.Find(id);
        if (mycat == null)
        {
            return HttpNotFound();
        }
        return View(mycat);
    }

    //
    // POST: /MyCats/Delete/5

    [HttpPost, ActionName("Delete")]
    [ValidateAntiForgeryToken]
    public ActionResult DeleteConfirmed(int id)
    {
        MyCat mycat = db.MyCats.Find(id);
        db.MyCats.Remove(mycat);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    protected override void Dispose(bool disposing)
    {
        db.Dispose();
        base.Dispose(disposing);
    }
}

型号:

public class MyCat
{
    public int ID { get; set; }

    [Required]
    public string CatName { get; set; }


    public bool IsAlive { get; set; }

    [Required]
    public string NickName { get; set; }

    public string OtherName { get { return "Mr. " + NickName; } }
}

public class MyCatDBContext : DbContext
{
    public MyCatDBContext()
        : base("MyCatDBContext")
    {
    }
    public DbSet<MyCat> MyCats { get; set; }
}

1 个答案:

答案 0 :(得分:1)

public MyCatDBContext()
        : base("MyCatDBContext")
    {
    }

MyCatDBContext是这里的连接字符串。

public DbSet<MyCat> MyCats { get; set; }

告诉数据库中有MyCat的MyCat(类)类型表。 您可能认为属性名称是MyCats,为什么表名是MyCat,这是EF使用的惯例,称为Singularized EntityType名称和Pluralized EntitySet名称。

public class MyCat
{
    public int ID { get; set; }

    [Required]
    public string CatName { get; set; }


    public bool IsAlive { get; set; }

    [Required]
    public string NickName { get; set; }

    public string OtherName { get { return "Mr. " + NickName; } }
}

Class指示表中每列的列名和数据类型。

如果你写的话。

context.MyCats.Add();

它添加到MyCats表

让我知道它是否有帮助。