2017-04-17 8 views
0

従業員を追加すると、会社のデータを尋ね、次の従業員を追加すると、会社のデータが再入力され、重複レコードが生成されます。 2人の従業員が同じ会社に所属している場合、私は会社の再登録をしないように私の検証となるべきですか?エラーASPNET COREの挿入に関する重複情報

public class Company 
{ 
    [Key] 
    public int Id { get; set; } 
    [Required] 
    [MaxLength(45)] 
    public string Code { get; set; } 
    [Required] 
    public string Name { get; set; } 
    public string BussinesName { get; set; } 

    public string WebAddress { get; set; } 

    public virtual ICollection<Employee> Employees { get; set; } 

} 
public class Employee 
{ 
    [Key] 
    public int Id { get; set; } 
    public int EmployeeNumber { get; set; } 
    [Required] 
    public Company Company { get; set; } 
    [Required] 
    public bool Active { get; set; } 
} 

POSTのCONTROLLER

[HttpPost] 
    public IActionResult Post([FromBody]Employee data) 
    { 
     //Validamos 
     if(ModelState.IsValid){ 
      //Agregamos registro 
      _context.Employee.Add(data); 
      return Ok(_context.SaveChanges()); 
     } 
     return BadRequest(ModelState); 
    } 

企業データの欠落に対する応答は次のとおりです。

{ 
    "Person": [ 
    "The Person field is required." 
], 
    "Company.Code": [ 
    "The Code field is required." 
], 
    "Company.Name": [ 
    "The Name field is required." 
] 
} 

会社情報

{ 
"Person": { 
    "lastNamePat": "Juan", 
    "lastNameMat": null, 
    "firstName": "Lopez" 
}, 
"Company" :{ 
    "Code": "XXX", 
    "Name": "test" 
} 

}

会社のテーブル Database Duplicate Info

重複しない情報の妥当性を検証する方法を教えてください。

+0

あなたは 'Employee'と' Company'エンティティ間の外部キーを持っているように見えません。 – Cameron

+0

http://www.entityframeworktutorial.net/code-first/configure-one-to-many-relationship-in-code-first.aspx –

答えて

0

以下のように試すことができます。基本的には、既に存在する場合は "Company"をnullに設定する必要があります。

 if (ModelState.IsValid) 
     { 
      try 
      { 
       if (data != null && data.Company != null) 
       { 
        if (_context.Employee.Company.Any(x => x.Code == data.Company.Code)) 
        { 
         data.Company = null; 
         _context.Employee.Add(data); 
        } 
        else 
        { 
         _context.Employee.Add(data); 
        } 
       } 

       return Ok(_context.SaveChanges()); 
      } 
      catch (Exception ex) 
      { 
      } 
     } 

     return BadRequest(ModelState); 
+0

私は会社をnullと定義しているが、その従業員は、私は情報を保存する必要があります従業員はその会社に属していますが、二重になる会社を再度追加することはありません –

+0

したがって、nullの代わりに既存の会社を割り当てる – trigras

0

抽象検証ツールを使用できます。 モデル有効な状態が検証ルールに設定されていますか。 例

RuleFor(c => c.ModuleId) .NotEmpty().WithMessage("Module id is required.") .Must(BeAnExistingModule).WithMessage("Module does not exist."); private bool BeAnExistingModule(AddVersion cmd, Guid moduleId) { return _moduleRules.DoesModuleExist(cmd.SiteId, moduleId); }