C# ASP.NET MVC CRUD带有LocalDb savechanges错误

C# ASP.NET MVC CRUD带有LocalDb savechanges错误,c#,asp.net-mvc,localdb,C#,Asp.net Mvc,Localdb,我使用的是VS 2015,我创建了一个ASP.NET MVC项目,并添加了一些有用的东西(登录和注册在名为MyDatabase.mdf的Localdb中运行良好) CRUD仅在db中创建函数,其余函数将稍后提供 但现在我找不到这份工作。在名为MyDatabase.mdf的本地数据库中,我创建了另一个名为Amsterdam的表: [MyDatabase.mdf][1] 这是我的MainDbContext.cs——我在这里添加了 public DbSet<Amsterdam> Amste

我使用的是VS 2015,我创建了一个ASP.NET MVC项目,并添加了一些有用的东西(登录和注册在名为
MyDatabase.mdf
的Localdb中运行良好)

CRUD仅在db中创建函数,其余函数将稍后提供

但现在我找不到这份工作。在名为
MyDatabase.mdf
的本地数据库中,我创建了另一个名为
Amsterdam
的表:

[MyDatabase.mdf][1]

这是我的
MainDbContext.cs
——我在这里添加了

public DbSet<Amsterdam> Amsterdam { get; set; }
在我的
Models
文件夹中,我创建了
Amsterdam.cs
,如下所示:

@model IEnumerable<MyFirstWebsite.Models.Amsterdam>
@{
    ViewBag.Title = "Amsterdam";
    var username = User.Identity.Name;
}

<h2>@username's Bestellijst Amsterdam</h2>

@using (Html.BeginForm())
{
    <span>Enter new item: </span>
    <br/>
    <input type="text" name="new_item"/>
    <br/>
    <span>Public post?</span>
    <input type="checkbox" name="check_public"/><br/>
    <br/>
    <input type="submit" value="Add Item"/>
}
<br/>

<table class="table table-bordered table-condensed">
    <thead>
    <tr>
        <th style="text-align: center;">Id Bestelling</th>
        <th style="text-align: center;">Details Bestelling</th>
        <th style="text-align: center;">Time - Ontvangen Bestelling</th>
        <th style="text-align: center;">Time - Verzonden Bestelling</th>
        <th style="text-align: center;">Edit</th>
        <th style="text-align: center;">Delete</th>
        <th style="text-align: center;">Public Post</th>
    </tr>
    </thead>
    <tbody>
    <tr>
        <td style="text-align: center;"></td>
        <td style="text-align: center;"></td>
        <td style="text-align: center;"></td>
        <td style="text-align: center;"></td>
        <td style="text-align: center;">
            <a href="@Url.Action("Edit", "Home")/">Edit</a>
        </td>
        <td style="text-align: center;">
            <a href="@Url.Action("Delete", "Home")/">Edit</a>
        </td>
        <td style="text-align: center;"></td>
    </tr>
    </tbody>
</table>
namespace MyFirstWebsite.Models
{
    public class Amsterdam
    {
        [Key]
        public int Id { get; set; }

        public string Details { get; set; }

        public string Date_Posted { get; set; }
        public string Time_Posted { get; set; }
        public string Date_Edited { get; set; }
        public string Time_Edited { get; set; }
        public string Public { get; set; }
        public int User_Id { get; set; }
    }
}
public ActionResult Amsterdam()
{
    return View();
}

[HttpPost]
public ActionResult Amsterdam(Amsterdam list)
{
    string timeToday = DateTime.Now.ToString("h:mm:ss tt");
    string dateToday = DateTime.Now.ToString("M/dd/yyyy");

    if (ModelState.IsValid)
    {
        using (var db = new MainDbContext())
        {
            Claim sessionEmail = ClaimsPrincipal.Current.FindFirst(ClaimTypes.Email);
            string userEmail = sessionEmail.Value;
            var userIdQuery = db.Users.Where(u => u.Email == userEmail).Select(u => u.Id);
            var userId = userIdQuery.ToList();

            var dbAmsterdam = db.Amsterdam.Create();
            dbAmsterdam.Details = list.Details;
            dbAmsterdam.Date_Posted = dateToday;
            dbAmsterdam.Time_Posted = timeToday;
            dbAmsterdam.User_Id = userId[0];
            db.Amsterdam.Add(dbAmsterdam);
            db.SaveChanges();
        }
    }
    else
    {
        ModelState.AddModelError("", "Incorrect format has been placed");
    }

    return View();
}
在我的
控制器
文件夹中,我的
家庭控制器
如下所示:

@model IEnumerable<MyFirstWebsite.Models.Amsterdam>
@{
    ViewBag.Title = "Amsterdam";
    var username = User.Identity.Name;
}

<h2>@username's Bestellijst Amsterdam</h2>

@using (Html.BeginForm())
{
    <span>Enter new item: </span>
    <br/>
    <input type="text" name="new_item"/>
    <br/>
    <span>Public post?</span>
    <input type="checkbox" name="check_public"/><br/>
    <br/>
    <input type="submit" value="Add Item"/>
}
<br/>

<table class="table table-bordered table-condensed">
    <thead>
    <tr>
        <th style="text-align: center;">Id Bestelling</th>
        <th style="text-align: center;">Details Bestelling</th>
        <th style="text-align: center;">Time - Ontvangen Bestelling</th>
        <th style="text-align: center;">Time - Verzonden Bestelling</th>
        <th style="text-align: center;">Edit</th>
        <th style="text-align: center;">Delete</th>
        <th style="text-align: center;">Public Post</th>
    </tr>
    </thead>
    <tbody>
    <tr>
        <td style="text-align: center;"></td>
        <td style="text-align: center;"></td>
        <td style="text-align: center;"></td>
        <td style="text-align: center;"></td>
        <td style="text-align: center;">
            <a href="@Url.Action("Edit", "Home")/">Edit</a>
        </td>
        <td style="text-align: center;">
            <a href="@Url.Action("Delete", "Home")/">Edit</a>
        </td>
        <td style="text-align: center;"></td>
    </tr>
    </tbody>
</table>
namespace MyFirstWebsite.Models
{
    public class Amsterdam
    {
        [Key]
        public int Id { get; set; }

        public string Details { get; set; }

        public string Date_Posted { get; set; }
        public string Time_Posted { get; set; }
        public string Date_Edited { get; set; }
        public string Time_Edited { get; set; }
        public string Public { get; set; }
        public int User_Id { get; set; }
    }
}
public ActionResult Amsterdam()
{
    return View();
}

[HttpPost]
public ActionResult Amsterdam(Amsterdam list)
{
    string timeToday = DateTime.Now.ToString("h:mm:ss tt");
    string dateToday = DateTime.Now.ToString("M/dd/yyyy");

    if (ModelState.IsValid)
    {
        using (var db = new MainDbContext())
        {
            Claim sessionEmail = ClaimsPrincipal.Current.FindFirst(ClaimTypes.Email);
            string userEmail = sessionEmail.Value;
            var userIdQuery = db.Users.Where(u => u.Email == userEmail).Select(u => u.Id);
            var userId = userIdQuery.ToList();

            var dbAmsterdam = db.Amsterdam.Create();
            dbAmsterdam.Details = list.Details;
            dbAmsterdam.Date_Posted = dateToday;
            dbAmsterdam.Time_Posted = timeToday;
            dbAmsterdam.User_Id = userId[0];
            db.Amsterdam.Add(dbAmsterdam);
            db.SaveChanges();
        }
    }
    else
    {
        ModelState.AddModelError("", "Incorrect format has been placed");
    }

    return View();
}
我知道我靠得很近,因为我的注册器可以工作,但我无法让阿姆斯特丹的CRUD工作。当我单击屏幕截图中所示的确定时(当我单击广告项时):

我犯了一个错误

用户代码未处理DbUpdateException


似乎EF正在对对象名进行复数化,以定义数据库中的表名(来自错误-
无效对象名dbo.Amsterdams

如果表名为
Amsterdam
(单数,不带尾随的“s”),则将此数据注释添加到模型类中:

[Table("Amsterdam")]
public class Amsterdam
{         
    [Key]
    public int Id { get; set; }
    .....
}
如果要完全关闭表名的多重化,可以将此行添加到
MainDbContext
类中:

protected override void OnModelCreating(DbModelBuilder dbModelBuilder)
{
    dbModelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
protectedoverride void OnModelCreating(DbModelBuilder DbModelBuilder)
{
dbModelBuilder.Conventions.Remove();
}

它还表示“查看内部异常”。是吗?它说什么?{“无效的对象名'dbo.Amsterdams'。}
db.Amsterdam.Create()
?这是做什么的?在代码库中创建Amsterdam表。它起作用了。我将notnull改为NULL,然后工作了Shyju,这要感谢内部的异常,但没有看到这一点。