我有Model类:
public class position
{
public string positioncode { get; set; }
public string english { get; set; }
public string chinese { get; set; }
public string big5 { get; set; }
public string jd { get; set; }
public string japanese { get; set; }
public int orgid { get; set; }
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int positionid { get; set; }
}
的DbContext:
public System.Data.Entity.DbSet<TestWebAPI1.Models.position> positions { get; set; }
和controller post方法,我必须根据传入的JSON html将记录插入数据库:
// POST api/position
[ResponseType(typeof(position))]
public async Task<IHttpActionResult> Postposition(position theposition)
{
db.positions.Add(theposition);
await db.SaveChangesAsync();
}
我的问题是:是否可以根据字段生成插入语句,在JSON中接收并避免在JSON中省略的字段中使用NULLS,如:
insert into position (positionid, positioncode ) values (2, "TEMP");
而不是列出所有字段的insert语句,这是默认的实体框架行为。
答案 0 :(得分:0)
这是一个可以使用的直接解决方案。
定义不同的上下文:
public class PositionsContext:DbContext
{
public DbSet<Position> Type { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
//define ignores here
modelBuilder.Entity<Position>().Ignore(t => t.big5);
}
}
并根据需要定义忽略。但首先,请阅读我的答案,我认为你走向错误的方向试图在这里取得成绩。 使用EF的开销将完全毁掉所有使用insert语句中的空值的优化。我执行了一个简单的测试:创建了一个包含40列的表并进行了2次插入:一个是大量的空值(38列),另一个是& #39;插入#Test(Id)值(1)&#39;。是的,第二个工作得快一点(我插入100000行,先花了2秒,秒--1.5秒)。但EF绝对不能插入每秒1000行。如果需要性能,则需要处理EF批处理,事务处理等,但不需要处理insert语句大小