2015-05-13 4 views
0

Я довольно новичок в Entity Framework 6, и поэтому может быть немного сложно решить этот вопрос, но по существу у меня есть конфигурация сущности, которая настроена так:Вставка объекта, который также отображается на вид

public class EntityExampleConfiguration : EntityTypeConfiguration<Entity> 
{ 
    public EntityExampleConfiguration() 
    { 
     Map(f => 
      { 
       f.Properties(p => new 
       { 
        p.ID, 
        p.Status 
        p.Filed 
        p.By, 
        p.Title, 
        p.Waiver, 
        p.Notes, 
        p.Type 
       }); 
       f.ToTable("EntityTable"); 
      }) 
     .Map(f => 
      { 
       f.Properties(p => new 
       { 
        p.EntityID, 
        p.EntityName, 
        p.County, 
        p.Hash 
       }); 
       f.ToTable("View"); 
      }); 

     HasKey(f => f.ID); 

     Property(f => f.ID).HasColumnName("ExID"); 
     Property(f => f.EntityID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed); 
     Property(f => f.EntityName).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed); 
     Property(f => f.County).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed); 
     Property(f => f.Hash).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed); 

    } 
} 

Если EntityExampleConfiguration объединяет таблицу (EntityTable) с целью (View). Моя проблема (я считаю) является то, что из-за способа это установить, когда я пытаюсь вставить что-то он не вставляет:

Db.Entry(EntityObjectToInsert).State = EntityState.Added; 
Db.Entity.Attach(EntityObjectToInsert); 
Db.SaveChanges(); 

Я не получаю исключение или что-нибудь, и моя программа просто продолжает выполнение, но если я остановлюсь в точке останова после попытки сохранения, EntityObjectToInsert.ID по-прежнему -1 (который по умолчанию при создании объекта), и это не в моей таблице.

Я подозреваю, что взгляд имеет какое-то отношение к этому, но не может найти никакой хорошей информации о том, как это могло бы быть, если оно даже есть. Я могу загружать данные в модель и обновлять, но вставка - это новая функция, которую я встраиваю в приложение, и это единственное, что не работает.

ответ

0

Если у вас есть сущность, которая, как вы знаете, уже существует в базе данных, но которая в настоящее время не отслеживается контекстом, вы можете указать контексту для отслеживания объекта с использованием метода Attach на DbSet. Объект будет находиться в состоянии Unchanged в контексте.

- https://msdn.microsoft.com/en-us/data/jj592676.aspx


Если должна быть тонкой, чтобы просто установить State к Added, или даже лучше, использовать DbSet<YourEntity>.Add(). Вы не должны устанавливать State и выполнять Attach().