Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EFCore-使用导航属性更新实体_C#_Ef Core 2.0 - Fatal编程技术网

C# EFCore-使用导航属性更新实体

C# EFCore-使用导航属性更新实体,c#,ef-core-2.0,C#,Ef Core 2.0,我有两个实体: public class Clientdetails { public int ClientId { get; set; } public string CompanyName { get; set; } public sbyte IndustryId { get; set; } public int BusinessModelId { get; set; } public Logincredentials Client { get; set; } } public

我有两个实体:

public class Clientdetails
{
 public int ClientId { get; set; }
 public string CompanyName { get; set; }
 public sbyte IndustryId { get; set; }
 public int BusinessModelId { get; set; }
 public Logincredentials Client { get; set; }
}

public partial class Logincredentials
{
public int UserId { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public sbyte RoleId { get; set; }
public bool IsActive { get; set; }
public Rolemaster Role { get; set; }
public Clientdetails Clientdetails { get; set; }
}
我想更新ClientDetails实体,同时还想更新Logincredentials实体。它是导航属性。
我尝试了以下代码:

public Clientdetails UpdateClient(Clientdetails client)
{
  var details =  _unitOfWork.ClientDetailsRepository.FindBy(c => c.ClientId == client.ClientId).Include(c=>c.Client).SingleOrDefault();
 _entities.Entry(details).State = EntityState.Modified;
 _entities.SaveChanges();
}
我传递的数据如下:

{"clientId":1,"companyName":"Hewlett Packard1",
"industryId":2,"businessModelId":2,
"client":{"userId":1,"email":"priya.dave@xyz.com","isActive":true}
}
它更新了ClientDetails实体的字段,但不更新导航属性的属性,即LoginRedentials

如果我手动分配属性,它就会工作:

 var details =  _unitOfWork.ClientDetailsRepository.FindBy(c => c.ClientId == client.ClientId).Include(c=>c.Client).SingleOrDefault();

if (details != null)
{  
if (client.Client != null)
{
if (!string.IsNullOrEmpty(client.Client.Email))
{
details.Client.Email = client.Client.Email;
}
}
}
但我想摆脱手工作业。如果它在手动分配时工作,那么如果我只是将我的输入修改实体分配给details对象,为什么它不工作?

我错过了什么?

我面前没有C#环境。你能试试细节吗。State=EntityState.Modified;而不是_entities.Entry(details).State=EntityState.Modified?它不允许我这样做。details是Clientdetails实体类型的对象。因此,您在方法中接收客户端并尝试更改它。你能试着简单地设置client.State吗?在映射实体中只能推断,我建议不要在updateclient中接收cliendetails实体发送dto。因此,如果映射为1到1,则应在子实体中包含FK,如果希望从双方获得数据,则应创建多对多关系。一对一Dto已具有FK。这里是LognCredentails表的UserId=ClientDetails表的ClientId。