我遵循亚当·弗里曼(Adam Freeman)在VS 2010上遵循Pro ASP.NET MVC 4(我在线下载了MVC 4模板)。我之前曾使用.EDMX文件,但是在第7章中,他没有这样做。我在我的WebUI项目中的Web.config文件中设置了一个基本的连接字符串,其中控制器和视图位于其中。另外,我在下面的域项目中列出了我的域类。当我运行应用程序时,问题出现了。该应用程序在我的数据库(dbo.request)中没有识别我的表,而是在实体名称空间中基于我的类名称创建一个表(因此它创建了一个custrequest表),并且还创建了一个_migration_history表。为了防止这种情况,我将数据注释在我的类[表(" mytableName")]上方添加。我无法弄清楚为什么必须添加此数据注释。另外,EF使我在主键上方添加一个[键],我可以理解,因为我没有ID属性,但是在书中,他没有这样做。我想知道我是否缺少明显的东西,因为我是MVC的新手。任何帮助,将不胜感激。我正在与EF 6合作。谢谢。
namespace Requestor.Domain.Entities
{
[Table("Request")]
public class CustRequest
{
[Key]
public int RequestId { get; set; }
public string RequestByUserCd { get; set; }
public DateTime RequestDateTime { get; set; }
public DateTime DueDate { get; set; }
}
}
namespace Requestor.Domain.Abstract
{
public interface ICustRequestRepository
{
IQueryable<CustRequest> Request { get; }
}
}
namespace ITRequestHub.Domain.Concrete
{
public class EFDbContext : DbContext
{
public DbSet<CustRequest> Request { get; set; }
}
}
namespace ITRequestHub.Domain.Concrete
{
public class EFCustRequestRepository : ICustRequestRepository
{
private EFDbContext context = new EFDbContext(); //retrieves the data
public IQueryable<CustRequest> Request
{
get { return context.Request; }
}
}
}
考虑使用 ef5 再次尝试,如果可以的话,我在尝试与MVC4一起工作时经历了类似的问题(我也可以做脚手架的工作)。<<<<<<<<<<<<<<<<<<<<<<<<<<<</p>
或一直到所有内容的最新版本,然后尝试使用ef6 尝试 mvc5(这似乎可以正常工作)
您遇到了EF的奇妙而有时令人沮丧的部分,其惯例。当您意识到惯例会简化生活时,很棒,但是当您认为框架正在执行任务未经您明确许可的情况下,令人沮丧。
首先,可以在此处找到有关EF6公约的其他信息:http://msdn.microsoft.com/en-gb/data/jj6799662.aspx
在您的第一点上,据我所知,EF将您的实体的名称称为它将在您的DB中创建的表名称。如您发现的那样,您确实通过"表"属性可以控制此属性,但是您也可以控制它希望在dbcontext中通过MANGE RENDICEL OUSTALE在dbcontext
中创建表格时要使您的实体名称相关。modelBuilder.Conventions.Remove<PluralizingTableNameConvention>()
在您的第二点上,我无法想象您需要一个附加到" requestId" 字段的"键" 属性。这里的约定是,如果字段名称包含ID的后缀(不敏感),则EF将自动将其包含在主键中,并且如果字段的类型是int或GUID,则将自动设置为自动种子身份列。