gpt4 book ai didi

c# - Entity Framework 从插入中排除字段

转载 作者:太空宇宙 更新时间:2023-11-03 15:43:53 24 4
gpt4 key购买 nike

我有模型类:

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; }
}

数据库上下文:

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 中接收并避免字段中的 NULLS,这些字段在 JSON 中被省略,例如:

insert into position (positionid, positioncode ) values (2, "TEMP");

而不是列出所有字段的插入语句,这是默认的 Entity Framework 行为。

最佳答案

这里有一个您可以使用的相当直接的解决方案。

像这样定义不同的上下文:

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);
}
}

并根据需要定义忽略 em。但首先,请阅读我对底部的回答,我认为您试图在此处实现性能时走错了方向。使用 EF 的开销将完全破坏插入语句中空值的所有优化。我执行了一个简单的测试:创建了一个包含 40 列的表并进行了 2 次插入:一个包含大量空值(38 列),另一个是 '插入#Test(Id) Values(1)'。是的,第二个工作得更快(我插入 100000 行,第一次用了 2 秒,第二个 - 1.5 秒)。但 EF 绝对不能每秒插入 1000 行。如果你需要性能,你需要处理 EF 批处理、事务等,而不是插入语句大小

关于c# - Entity Framework 从插入中排除字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29071233/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com