2014-09-10 2 views
1

У меня есть некоторые проблемы с этим кодом:Entity Framework 6.1.1 Код Сначала нужно создать нечитаемым таблицу

class Program 
{ 
     static void Main(string[] args) 
     { 
     Database.SetInitializer(new DropCreateDatabaseAlways<MyContext>()); 

     using (var context = new MyContext()) { 
      var newType = new SysType { Name = "New Name" }; 
      context.SysTypes.Add(newType); 
      context.SaveChanges();    
     } 

     using (var context = new MyContext()) { 
      Console.WriteLine(context.SysTypes.FirstOrDefault()); 
     } 

     Console.ReadLine(); 
     } 
    } 

    public class SysType 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
    } 

    public class MyContext : DbContext 
    { 
     public MyContext() : base("name=MyDb") { }  
     public DbSet<SysType> SysTypes { get; set; }  
    } 

Во время выполнения программы происходит исключение:

System.Data.Entity.Infrastructure. DbUpdateException»

System.Data.SqlClient.SqlExeption: специальные обновления системы каталогов не допускаются

. 0

Но база данных не получить создано (размещать изображения не разрешенные для меня)

! [SQL вид сервера обозревателя объектов]

Если попытаться запросить данные таблицы, генерируется исключение

! [Исключение, если данные таблицы запроса]

Если я создаю таблицы вручную с использованием сценария SQL, то запрос таблицы будет успешным.

Через несколько часов я понял, что это из-за названия таблицы.

Если имя таблицы изменений - все работает отлично.

Мой вопрос: почему мое имя таблицы SysType выдает исключение? А есть ли другие названия таблиц, которые вызывают подобные проблемы?

Я буду рад услышать ответ на мой вопрос

Update: Модель Первый подход - тот же результат

ответ

2

Поскольку предприятие вы должны быть созданы как dbo.SysTypes, где, как существующая таблица системы в базе данных также dbo.SysTypes.

Ваш объект будет создан в качестве dbo.SysTypes потому dbo этого имя схемы по умолчанию при создании таблицы и SysType будет множественным в SysTypes по PluralizingTableNameConvention.

Решение настроить вручную сгенерированное имя таблицы, вы можете либо с помощью атрибута:

[TableAttribute("Application_SysTypes")] 

или с использованием свободно API:

modelBuilder.Entity<SysType>().ToTable("Application_SysTypes")` 
+0

Спасибо. Я не обращал внимания на плюрализацию имени – Ssh