为什么我的ASP.NET Web应用程序没有连接到我的数据库.sdf文件

时间:2014-07-24 11:18:41

标签: c# asp.net sql asp.net-mvc

我对ASP和Windows Web开发完全陌生。我有一个用ASP.NET MVC 4编写的小型Web应用程序,我已经设置了一个带有两个表的.sdf数据库。

当我运行应用程序时,数据存储在某处,但它不在我在visual studio中创建的数据库中。

我在Web.config中的连接字符串:

<connectionStrings>
    <add name="MoraleDBContext" connectionString="Data Source=|DataDirectory|\Morale.sdf" providerName="System.Data.SqlServerCe.4.0"/>
</connectionStrings>

和我的控制器方法(试图让某些东西起作用):

// POST: /MoraleScore/Create
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create(MoraleScoresDB moralescoresdb)
        {
            UsersDB test = new UsersDB();
            test.ID = 2;
            test.UserName = "jake";
            db.Users.Add(test);

            // Do checks on user to make sure that they have not already voted for this sprint, that they are allowed to vote...or before this?
            string username = System.Web.HttpContext.Current.User.Identity.Name;

            // Get username from list in database and set the right ID
            List<UsersDB> users = db.Users.SqlQuery("SELECT * FROM UsersDBs WHERE UserName = '" + username + "'").ToList();
            moralescoresdb.UserID = 1;/* users[0].ID;*/

            List<MoraleScoresDB> scores = db.MoraleScores.SqlQuery("SELECT * FROM MoraleScoresDBs;").ToList();

            if (ModelState.IsValid)
            {
                db.MoraleScores.Add(moralescoresdb);
                db.SaveChanges();
            }

            List<MoraleScoresDB> scores2 = db.MoraleScores.SqlQuery("SELECT * FROM MoraleScoresDBs;").ToList();

            return RedirectToAction("Index");
        }

附加调试器后,我可以看到分数比分数少一个,但我的数据库表是空的。 &#34;数据库&#34;这是sql server compact 4.0本地数据库在我的App_Data文件夹中。

如果您需要更多信息,请告诉我,因为我对此完全陌生,我可能会事先遗漏一些信息。 (数据库名为&#34; Morale.sdf&#34;并且在服务器资源管理器中可见)

编辑:

这是模特:

namespace AgileWebsite.Models
{
    public class UsersDB
    {
        public int ID { get; set; }
        public string UserName { get; set; }
    }
    public class MoraleScoresDB
    {
        public int ID { get; set; }
        public int UserID { get; set; }
        [Required]
        [Display(Name = "Morale Score")]
        [Range(1, 10, ErrorMessage = "The score needs to be between 1 and 10.")]
        public int MoraleScore { get; set; }
    }

    public class MoraleDBContext : DbContext
    {
        public MoraleDBContext()
            : base("MoraleDBContext")
        {}

        public DbSet<UsersDB> Users { get; set; } 
        public DbSet<MoraleScoresDB> MoraleScores { get; set; } 
    }
}

这里是moraleScoreController的顶部(就在您上面看到的帖子请求创建功能的上方)

namespace AgileWebsite.Controllers
{
    public class MoraleScoreController : Controller
    {
        private MoraleDBContext db = new MoraleDBContext();
        private MoraleScoresDB moraleModel = new MoraleScoresDB();

更新:

事实证明,自动创建的数据库是在以下位置创建的: C:\ Program Files \ Microsoft SQL Server \ MSSQL10.SQLEXPRESS \ MSSQL \ DATA

我想我也使用了错误的web.config文件,其中有一个&#34; Views&#34;文件夹和项目中的文件夹,后者是要使用的文件夹。

连接的名称应与派生的DbContext类相同。

1 个答案:

答案 0 :(得分:0)

(假设db是DbContext派生类(来自实体框架库)。)

尝试添加...

db.SaveChanges();
将用户添加到数据库后

另外,我在使用带有紧凑型数据库的服务器资源管理器时遇到了一些问题。它会丢弃连接(显示小红色&#34; x&#34;)有时即使我选择&#34;刷新&#34;在连接上我不会看到新数据。我删除了连接,然后再次添加(通过双击sdf文件)然后我可以看到新数据。