Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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# 如何使用实体框架将相关实体更改为另一个现有实体_C#_Entity Framework - Fatal编程技术网

C# 如何使用实体框架将相关实体更改为另一个现有实体

C# 如何使用实体框架将相关实体更改为另一个现有实体,c#,entity-framework,C#,Entity Framework,我有两门课: public partial class ShipmentRoutePointDb { public long Id { get; set; } // Primary key public System.Guid Uuid { get; set; } public virtual TransportInfoDb NextTransportInfo { get; set; } } public partial class TransportInfoDb {

我有两门课:

public partial class ShipmentRoutePointDb
{
    public long Id { get; set; } // Primary key
    public System.Guid Uuid { get; set; }
    public virtual TransportInfoDb NextTransportInfo { get; set; }
}

public partial class TransportInfoDb
{
    public TransportInfoDb()
    {
        this.CertifiedConsignments = new HashSet<CertifiedConsignmentDb>();
        this.TransportInfoGroups = new HashSet<TransportInfoGroupDb>();
    }

    public long Id { get; set; }

    public string VehicleNumber { get; set; }

    public virtual ICollection<CertifiedConsignmentDb> CertifiedConsignments { get; set; }
    public virtual ICollection<TransportInfoGroupDb> TransportInfoGroups { get; set; }
}
然后,我需要检查是否在TransportInfoDb中创建了新记录,或者是否已经存在具有类似参数的记录:

var duplicate = transportInfoRepository.GetByParams(shipmentRoutePointDb.NextTransportInfo.VehicleNumber);
如果我能找到这样的记录,我会更新shipmentRoutePointDb,如下所示:

shipmentRoutePointDb.NextTransportInfo = duplicate;
shipmentRoutePointDb.NextTransportId = duplicate.Id;

_shipmentRoutePointRepository.Update2(shipmentRoutePointDb);

public void Update2(ShipmentRoutePointDb entity)
{
    var entr = _context.Entry<ShipmentRoutePointDb>(entity);

    entr.State = EntityState.Modified;

    SaveChanges();
}
shipmentRoutePointDb.NextTransportInfo=重复;
shipmentRoutePointDb.NextTransportId=replicate.Id;
_shipmentRoutePointRepository.Update2(shipmentRoutePointDb);
公共无效更新2(ShipmentRoutePointDb实体)
{
var entr=_context.Entry(实体);
entr.State=EntityState.Modified;
保存更改();
}
但是SaveChanges()引发了一个异常:

System.InvalidOperationException:“引用完整性约束 发生冲突:上的“TransportInfoDb.Id”的属性值 关系的一端与的属性值不匹配 另一端为“ShipmentRoutePointDb.NextTransportId”


我知道我还没有列出我使用的一些方法,但是它们工作得很好,它们的名称也很简单。

我的朋友,我相信你唯一需要做的就是通过传递id和参数进行如下更新:

public void Update2(var id, type entity)
{
    var result = _context.tableName.SingleOrDefault(b => b.NextTransportId == id);
    if (result != null)
    {
        try
        {
            db.Entry(entity).State = EntityState.Modified;
            db.SaveChanges();
        }
        catch (Exception ex)
        {
            throw;
        }
    }
}
这有帮助。主要原因是在此项目上禁用了检测更改

public void Update2(var id, type entity)
{
    var result = _context.tableName.SingleOrDefault(b => b.NextTransportId == id);
    if (result != null)
    {
        try
        {
            db.Entry(entity).State = EntityState.Modified;
            db.SaveChanges();
        }
        catch (Exception ex)
        {
            throw;
        }
    }
}
public void Update2(long transportId, long shipmentRouteId)
{
    var shipment = _context.ShipmentRoutePointDb.FirstOrDefault(x => x.Id == shipmentRouteId);            
    _context.ShipmentRoutePointDb.Attach(shipment);

    shipment.NextTransportId = transportId;

    _context.ChangeTracker.DetectChanges();

    SaveChanges();
}