实体框架从插入中排除字段

时间:2015-03-16 07:03:53

标签: c# entity-framework

我有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语句,这是默认的实体框架行为。

1 个答案:

答案 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语句大小