ASP.NET MVC在访问SQL数据库时需要模型中的[Key]

时间:2016-06-19 16:36:14

标签: c# entity-framework asp.net-mvc-4 ado.net sql-server-express

不久之后,我想谁知道这个问题会理解这个问题。

错误 EntityType没有键定义

我有SQL Express数据库,包括数据:书籍,卖家,销售。所有字段,键和关系都设置正确。

我通过添加ADO.NET EF创建模型,因此它从我的数据库生成模型。

[编辑] 右键单击Models文件夹,然后选择Add - >添加模型。 ADO.NET实体数据模型。然后选择要添加的数据库和表,然后在项目中显示架构,其中包含书籍,卖家,销售和上下文的所有类 - cs和tt文件。然后在此模式上,我右键单击并选择Add Code Generation Item,然后选择EF5 Db Context Generator。从web.config中选择了连接字符串。

<connectionStrings>
    <add name="BookStoreConnection" providerName="System.Data.SqlClient" connectionString="Data Source=COMPUTERNAME\SQLEXPRESS;Initial Catalog=BookStore;Integrated Security=True" />
</connectionStrings>

这是生成的Book类的示例:

using System;
using System.Collections.Generic;
using System.Web.Mvc;

namespace BookStore.Models
{   
[Bind(Exclude="book_id")] 
public class Book
{
    public int book_id { get; set; }

    public string book_title { get; set; }
    public string book_author { get; set; }
    public Nullable<double> book_price { get; set; }

    public virtual ICollection<Sale> Sales { get; set; }
}
}

我添加了一个控制器,从db上下文中检索数据:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Data.Entity;
using BookStore.Models;

namespace BookStore.Controllers
{
    public class BooksController : Controller
    {
        //
        // GET: /Book/

        BSEntities db = new BSEntities();

        public ActionResult Index()
        {
            var books = db.Books.ToList();
            return View(books);
        }

    }
} 

我创建了View并尝试读取模型属性,例如book_title等。

@model IEnumerable<BookStore.Models.Book>

<h2>Books</h2>

<ul>
    @foreach (var b in Model)
    {
        <li>@b.book_title + " - " + @b.book_author</li>
    }
</ul>

如果我没有在书籍,销售和卖家类中添加 [Key] 参数,则会显示此错误

enter image description here

我输入此参数后,会显示“图书”页面但没有数据。

为什么?如果我从现有数据库创建模型,为什么需要手动设置关键字段?

看起来它从其他地方加载它。

如何使我的模型使用外部sql express数据库?

1 个答案:

答案 0 :(得分:0)

自己回答我的问题

1)可选。我为我的SQLServer 2008安装了Service Pack 2更新。

2)我从MVC项目中删除了所有生成的模型。整个节点以ModelName.edmx

开头

3)生成新的ADO.NET数据。右键单击该项目,添加 - &gt; ADO.NET实体数据。所有内容都显示在根项目文件夹中。

4)创建具有编辑,创建等功能的控制器,并将其配置为使用模型和数据库上下文。视图会自动添加。