通过配置忽略重复的密钥插入

时间:2019-01-08 13:06:13

标签: c# entity-framework entity-framework-core

我有一个系统每天调用API多次,并返回一个JSON数组。 JSON数组中的对象由包装,详细信息和项目三个级别组成。例如:

[
   {
      "Key": "value",
      "Details": [
           {
               "Key": "Value",
                "Item": {
                     "Id": 1,
                      "Title": "abc" 
                 }
           }
       ]

   }
]

我的数据库模型也采用这种结构,这意味着我有一个主表,一个明细表和一个项目表。具体来说,详细信息表具有两个关系,一个关系到主表,一个关系到项目表。

我的客户上下文是按照通用方式设计的,这意味着它不了解正在捕获,反序列化和保存的内容。

 ISerializer serializer; 
 DbContext db;
 String url;
 public ClientContext(ISerializer serializer, DbContext db, String url){
      this.serializer = serializer;
      this.db = db;
      this.url = url;
 }
 public async Task RequestAsync() {
    ... 
    return response; 
 }
 public async Task SaveAsync(){
    using(db){
        db.add(serializer.deserialize(await RequestAsync());
        await db.SaveChangesAsync();
    }
 }

deserialize方法返回一个对象,它没有特定的返回类型。假设我提供的JSON示例,如果数据库中不存在Id对象的Items属性,EF会继续添加它,但是如果存在,它将抛出重复的键异常。

我无法进行任何查询来跟踪该级别的重复项,并且我想配置实体框架(而不是在SQL Server中)以忽略重复项。

EF Core支持吗?

0 个答案:

没有答案