我对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 :(得分:0)
如果您知道某个实体已存在于数据库中但当前未被上下文跟踪,那么您可以告诉上下文使用DbSet上的Attach方法跟踪实体。实体将在上下文中处于Unchanged状态。
- https://msdn.microsoft.com/en-us/data/jj592676.aspx
如果将State
设置为Added
,甚至更好,可以使用DbSet<YourEntity>.Add()
。您不应同时设置State
并执行Attach()
。