#asp.net-mvc #asp.net-mvc-4
#asp.net-mvc #asp.net-mvc-4
Вопрос:
Я использую Visual Studio 2012, MVC 4 и Razor (CSHTML). Я создал Person.Таблица Person в тестовой базе данных. Я хотел, чтобы моя модель PersonModels.cs использовала эту таблицу, поэтому я создал следующие 2 класса.
public class Person
{
[Key]
public int BusinessEntityID { get; set; }
public string PersonType { get; set; }
public string Title { get; set; }
public string FirstName { get; set; }
public string MiddleName { get; set; }
public string LastName { get; set; }
public string Suffix { get; set; }
public int EmailPromotion { get; set; }
[XmlAttribute(DataType = "string")]
public string AdditionalContactInfo { get; set; }
[XmlAttribute(DataType = "string")]
public string Demographics { get; set; }
public string rowguid { get; set; }
public DateTime ModifiedDate { get; set; }
}
public class PersonDbContext : DbContext
{
public DbSet<Person> person { get; set; }
}
Я думал, что он выберет человека.Таблица Person, поскольку имя класса было Person, хотя я не включил схему. Однако после запуска приложения и выполнения вставки я проверил человека.Таблица Person, но строки там не было. Он создал dbo.Таблица людей и вставил туда строку! Я дважды проверил, потому что думал, что могу быть пьян, но я нигде не писал людям!
Я читал об обратном poco, но я хотел бы понять, как это работает, больше, чем заставить его работать.
Редактировать: это сработало! Пожалуйста, найдите код, который я использовал в приложении:
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity;
namespace client_site.Models
{
[Table("Person", Schema = "Person")]
public class TestModel
{
[Key]
public int ID { get; set; }
}
public class DefaultConnectionX : DbContext
{
public DbSet<TestModel> test { get; set; }
}
}
Комментарии:
1. EF автоматически объединяет множество типов имен таблиц… Person — это множественное число людей. Вы можете отключить это, удалив соглашение о множественном числе, или вы можете просто указать имя таблицы в атрибуте или в свободной конфигурации. См. Ответ Раймонда по причине, по которой он не использовал схему Person.
2. @Erik Funkenbusch, давайте возьмем
dbo
, например, схему по умолчанию,public DbSet<Person> persons { get; set; }
чтоpersons
означает? множественное имя таблицы или имя свойства правильно?3. @stom — «persons» — это просто имя переменной, как бы вы ее ни называли. Это не имеет ничего общего с именем таблицы. Имя таблицы будет производным от имени объекта (Person).
4. @Erik Funkenbusch, хорошо, значит, вы имеете в виду, что entity framework автоматически предоставляет имя таблицы на основе имени моего класса? В этой статье
MSDN
используется авторpublic DbSet<Movie> Movies { get; set; }
, и здесь внизу я вижу имя таблицы как фильмы, так что это основано на переменной или entity framework автоматически это сделал?5. @stom — да, EF автоматически увеличивает число имен классов. Вы можете отключить это, но это значение по умолчанию.
Ответ №1:
dbo — это схема базы данных по умолчанию. Если вы хотите создать таблицу в схеме people, вам необходимо добавить атрибут
[Таблица («Человек», Схема = «Человек»)]