我正在關注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」)]上面添加了Data Annotation。我無法弄清楚爲什麼我必須添加這個數據註釋。此外,EF讓我在我的主鍵上添加了一個[Key],我可以理解,因爲我沒有ID屬性,但在書中他沒有這樣做。我想知道是否因爲我對MVC很新而缺少一些明顯的東西。任何幫助,將不勝感激。我正在使用EF 6.謝謝。MVC 4和EF6數據庫優先:映射問題
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; }
}
}
}
所以,在書中,他提到DbSet <>是映射發生的地方。該屬性的名稱是該表,並且DbSet的類型是要建模的類。這與EF6改變(我正在閱讀EF文章) –
@JayMichael我不認爲這是永遠的情況下,DbSet屬性的名稱映射到您的數據庫中的表名稱。它總是被映射到實體類的名稱。看到這裏:http://msdn.microsoft.com/en-gb/data/jj591583#TableColumn – ProxyTech
似乎這樣做。我加了'protected override void OnModelCreating(DbModelBuilder modelBuilder){modelBuilder.Conventions.Remove(); Database.SetInitializer (null);}'我能夠刪除DataAnnotations。你說的很有意思,也許我錯誤地讀了書中的這段話。 –