繁体   English   中英

首先是MVC 4和EF6数据库:映射问题

[英]MVC 4 and EF6 database first: issue with mapping

我将在VS 2010上关注Adam Freeman的Pro ASP.NET MVC 4(我在线下载了MVC 4模板)。 我之前使用过.edmx文件,但是在第7章中,他没有这样做。 我在控制器和视图所在的WebUI项目的web.config文件中的SQL Server中设置了基本连接字符串。 另外,我在下面的Domain项目中列出了Domain类。 当我运行应用程序时出现问题。 该应用程序无法识别数据库(dbo.Request)中的表,而是基于Entities名称空间中的类名创建表(因此它创建了CustRequest表),并且还创建了_Migration_History表。 为了防止这种情况,我在类[Table(“ MyTableName”)]上方添加了数据注释。 我不知道为什么我必须添加此数据注释。 另外,EF使我在主键上方添加了一个[Key],我可以理解这是因为我没有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 ,在使EF6与MVC4配合使用时,我遇到了类似的问题(我也无法使脚手架起作用)。

或者将所有内容都升级到最新版本,然后尝试将MVC5与EF6配合使用 (这似乎很好用)

您已经碰到了EF的奇妙之处,有时甚至令人沮丧。 当您意识到这些约定可以简化生活时,这真是太好了,但是当您感到框架未经您的明确许可而正在执行任务时,您会感到沮丧。

首先,可以在这里找到有关EF6约定的其他信息: http : //msdn.microsoft.com/en-gb/data/jj679962.aspx

据我所知,关于您的第一点,EF将实体的名称作为它将在数据库中创建的表的名称。 正如您所发现的,您确实可以通过“ Table”属性对此进行控制,但是您也可以控制通过创建DbContext中的约定删除来创建表时要对实体名称进行复数的愿望

modelBuilder.Conventions.Remove<PluralizingTableNameConvention>()

关于第二点,我无法想象您需要在“ RequestId”字段中附加“ Key”属性。 这里的约定是,如果字段名称包含ID的后缀(不区分大小写),则EF将自动将其包括为主键,并且如果字段的类型为Int或Guid,它将自动设置为自动种子标识列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM