gpt4 book ai didi

c# - 对象中的 EF6 AddOrUpdate 对象

转载 作者:太空宇宙 更新时间:2023-11-03 23:41:47 25 4
gpt4 key购买 nike

这就是我们拥有的:

public class Car
{
public int Id { get; set; }
public Engine Engine { get; set; }
}

public class Engine
{
public int Id { get; set; }
public string EngineName{ get; set; }
}

//Map to the DB tables
public CarMap()
{
ToTable("CAR");
HasKey(t => t.Id);
Property(t => t.Id).HasColumnName("CAR_ID").HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
HasOptional(x => x.Engine).WithMany().Map(x => x.MapKey("ENGINE"));
}

DB表CAR由int Id和int EngineID两列组成(FK到Engine表)

假设我们在 Car DB 表中有一个现有的汽车对象。但是我们想更新记录并为汽车添加引擎,所以我们在下面分配它。

 var car = new car()
{
id=1,
new Engine()
{
id=5,
EngineName="V8"
}
}

现在我们使用

carDataProvider.AddOrUpdate(car);
_unitOfWork.Commit();

但是使用我的映射的 Entity Framework 不会更新 CAR 表中的 EngineId 字段,但是如果我使用 Add(car);然后将创建汽车记录(f.e. id=2; EngineId=99;)以及引擎记录(如果不存在)。

所以我应该更改映射或者我还能如何调用 AddOrUpdate(car);以便更新 EngineId 字段?

最佳答案

我建议您以这种方式配置您的模型:

public class Car
{
public int Id { get; set; }
public int EngineId { get; set; }
public Engine Engine { get; set; }
}

public class Engine
{
public int Id { get; set; }
public string EngineName{ get; set; }
}

关系配置是这样的:

public CarMap()
{
ToTable("CARS");
HasKey(t => t.Id);
Property(t => t.Id).HasColumnName("CAR_ID");
HasOptional(x => x.Engine).WithMany().HasForeignKey(x=>x.EngineId);
}

如您所见,我删除了您指定 Car Id 为 Identity 的代码,您不需要这样做,这是 int 类型 PK 的默认行为。所以,如果你想自己设置引擎 ID,你需要配置你的实体,如下所示:

public EngineMap()
{
ToTable("ENGINES");
HasKey(t => t.Id);
Property(t => t.Id).HasColumnName("ENGINE_ID").HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
}

我不知道您的 AddOrUpdate 方法是如何实现的,但我猜它应该是这样的:

public void AddOrUpdate(Car car)
{
if (car.Id == default(int)) {
// New entity
context.Cars.Add(car);
} else {
// Existing entity
context.Entry(car).State = EntityState.Modified;
}
}

关于c# - 对象中的 EF6 AddOrUpdate 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28808796/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com