C# 从特定的select查询更新记录时了解实体框架
希望有人能帮助我更多地了解.net核心实体框架在下面的场景中是如何工作的 我有一个更新功能,它工作得非常好。C# 从特定的select查询更新记录时了解实体框架,c#,entity-framework,.net-core,C#,Entity Framework,.net Core,希望有人能帮助我更多地了解.net核心实体框架在下面的场景中是如何工作的 我有一个更新功能,它工作得非常好。 但是当我尝试优化我的select查询时,我遇到了一个错误。 为了更好地理解,这里有3个类及其关系: public class Dealer { public int Id { get; set; } public string Name { get; set; } ... public virtual ICollection<Vehicle>
但是当我尝试优化我的select查询时,我遇到了一个错误。 为了更好地理解,这里有3个类及其关系:
public class Dealer
{
public int Id { get; set; }
public string Name { get; set; }
...
public virtual ICollection<Vehicle> Vehicles { get; set; }
}
public class Vehicle
{
public string Id { get; set; }
public string Brand { get; set; }
public string Model { get; set; }
...
public int DealerId { get; set; }
public Dealer Dealer { get; set; }
public virtual ICollection<Accessory> Accessories { get; set; }
}
public class Accessory
{
public int Id { get; set; }
public string Name { get; set; }
public int Quantity { get; set; }
public string VehicleId { get; set; }
public Vehicle Vehicle { get; set; }
}
根据日志可以看出,魔术按以下顺序发生:
public Dealer Get(int id)
{
return _db.Where(x => x.Id == id)
.Select(x => new Dealer
{
Id = x.Id,
Name = x.Name,
...
})
.FirstOrDefault();
}
就在那时,我遇到了这个错误
SqlException:INSERT语句与外键约束“FK\U附件\U车辆\U Id”冲突。冲突发生在数据库表“dbo.Vehicles”列“Id”中
INSERT INTO [Accessories] ([Name], [Quantity], [VehicleId])
VALUES (@p0, @p1, @p2);
SELECT [Id] FROM [Accessories] WHERE @@ROWCOUNT = 1 AND [Id] = scope_identity();
很明显,这是因为它试图首先插入到[附件]中,而不是第三步的工作版本中
所以在这里,我希望有人能解释为什么在我的select查询中指定特定字段会导致这样的行为:当涉及FK时,.net首先插入附件而不是车辆
提前谢谢。表中的
车辆是否启用了自动PK?@JohnB抱歉,我已经更新了代码。车辆实际上使用guid作为其Id。
public Dealer Get(int id)
{
return _db.Where(x => x.Id == id)
.Select(x => new Dealer
{
Id = x.Id,
Name = x.Name,
...
})
.FirstOrDefault();
}
INSERT INTO [Accessories] ([Name], [Quantity], [VehicleId])
VALUES (@p0, @p1, @p2);
SELECT [Id] FROM [Accessories] WHERE @@ROWCOUNT = 1 AND [Id] = scope_identity();