Я следую за Pro ASP.NET MVC 4 от Адама Фримена на VS 2010 (я загрузил шаблон MVC 4 онлайн). Ранее я работал с файлом .edmx, но в главе 7 он этого не делает. Я устанавливаю базовую строку соединения с SQL Server в файле web.config в моем проекте WebUI, где расположены мои контроллеры и представления. Кроме того, я перечислил классы домена в моем проекте «Домен» ниже. Проблема возникает, когда я запускаю приложение. Приложение не распознает мою таблицу в моей базе данных (dbo.Request) и вместо этого создает таблицу на основе моего имени класса в пространстве имен Entities (поэтому она создает таблицу CustRequest), а также создает таблицу _Migration_History. Чтобы предотвратить это, я добавляю аннотацию данных выше моего класса [Таблица («MyTableName»)]. Я не мог понять, почему мне пришлось добавить эту аннотацию данных. Кроме того, 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. Интересно, что вы сказали, может быть, я неправильно прочитал этот отрывок в книге. –