2013-10-11 72 views
5

我无法在表中插入一条记录实体框架添加新的实体

public class KPITable 
{ 

    [Key]   
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Query { get; set; } 
    public string TableName { get; set; } 
} 

public class KPITableMap : EntityTypeConfiguration<KPITable> 
{ 
    public KPITableMap() 
    { 
     ToTable("EIS_KPI", AppUtility.EISMDBSchemaName); 
     Property(t => t.Id).HasColumnName("KPI_ID");   
     Property(t => t.Name).HasColumnName("NAME").HasMaxLength(20); 
     Property(t => t.Query).HasColumnName("QUERY").HasMaxLength(20); 
     Property(t => t.TableName).HasColumnName("TABLE_NAME").HasMaxLength(20); 

    } 
} 

我得到错误,当我尝试添加新的实体

一个空店产生的价值是为返回非可空构件 类型的 'ID'“EISM.Database.Models.KPITable

var newEntity = new KPITable(); 
newEntity.Id = 55; 
       newEntity.Name = data.Name; 
       newEntity.Query = data.Query; 
       newEntity.TableName = data.TableName; 
_dbContext.KPIs.Attach(newEntity); 
       _dbContext.Entry(newEntity).State = EntityState.Added; 
       _dbContext.SaveChanges(); 
+0

这可能不是答案,但你可以尝试改变'Id'到'诠释? Id'并再次尝试操作。 – Nilesh

+0

数据库中的ID列是否名为KPI_ID?另外:你确定你的地图加载正确吗? – Kristof

+0

ID列映射数据库表中的KPI_ID。映射加载正确。我能够检索和更新记录,只有问题是插入新记录。 @Nilesh是的,我试图让int?为Id,但没有工作 – Vijay

回答

10

这解决了我的问题

[Key]  
[DatabaseGenerated(DatabaseGeneratedOption.None)] 
public int Id { get; set; } 

或者你可以删除此行

[DatabaseGenerated(DatabaseGeneratedOption.Computed)] 
0

这应该工作:

var newEntity = new KPITable(); 
newEntity.Id = 55; 
       newEntity.Name = data.Name; 
       newEntity.Query = data.Query; 
       newEntity.TableName = data.TableName; 
_dbContext.KPIs.AddObject(newEntity); 
_dbContext.SaveChanges(); 

连接是现有的实体(当它们被分离,或当你想将它连接到另一个实体)。

AddObject用于新实体。

+0

嗨,我正在使用EF 5所以相当于AddObjects是_dbContext.Set ().Add(newEntity);但是这仍然不起作用 – Vijay