不久之后,我想谁知道这个问题会理解这个问题。
错误 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] 参数,则会显示此错误
我输入此参数后,会显示“图书”页面但没有数据。
为什么?如果我从现有数据库创建模型,为什么需要手动设置关键字段?
看起来它从其他地方加载它。
如何使我的模型使用外部sql express数据库?
答案 0 :(得分:0)
自己回答我的问题
1)可选。我为我的SQLServer 2008安装了Service Pack 2更新。
2)我从MVC项目中删除了所有生成的模型。整个节点以ModelName.edmx
开头3)生成新的ADO.NET数据。右键单击该项目,添加 - &gt; ADO.NET实体数据。所有内容都显示在根项目文件夹中。
4)创建具有编辑,创建等功能的控制器,并将其配置为使用模型和数据库上下文。视图会自动添加。