插入也映射到视图

时间:2015-05-13 19:56:56

标签: c# entity-framework-6 savechanges

我对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(这是对象的默认值)已创建),而且它不在我的表格中。

我怀疑这个观点与此有关但却无法找到任何有关它的信息,如果是的话。我能够将数据加载到模型中并进行更新,但插入是我在应用程序中构建的一项新功能,它是唯一不起作用的功能。

1 个答案:

答案 0 :(得分:0)

  

如果您知道某个实体已存在于数据库中但当前未被上下文跟踪,那么您可以告诉上下文使用DbSet上的Attach方法跟踪实体。实体将在上下文中处于Unchanged状态。

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

如果将State设置为Added,甚至更好,可以使用DbSet<YourEntity>.Add()。您不应同时设置State并执行Attach()