gpt4 book ai didi

c# - 保存实体导致重复插入查找数据

转载 作者:行者123 更新时间:2023-11-30 19:48:17 25 4
gpt4 key购买 nike

我正在使用 EF 4.1“代码优先”来创建我的数据库和对象。

给定:

public class Order 
{
public int Id { get; set; }
public string Name { get; set; }
public virtual OrderType OrderType { get; set; }
}

public class OrderType
{
public int Id { get; set; }
public string Name { get; set; }
}

一个订单有一个订单类型。订单类型只是一个查找表。值不会改变。使用 Fluent API:

//Order
ToTable("order");
HasKey(key => key.Id);
Property(item => item.Id).HasColumnName("order_id").HasColumnType("int");
Property(item => item.Name).HasColumnName("name").HasColumnType("string").HasMaxLength(10).IsRequired();

HasRequired(item => item.OrderType).WithMany().Map(x => x.MapKey("order_type_id")).WillCascadeOnDelete(false);

//OrderType
ToTable("order_type");
HasKey(key => key.Id);

Property(item => item.Id).HasColumnName("order_type_id").HasColumnType("int");
Property(item => item.Name).HasColumnName("name").HasColumnType("nvarchar").HasMaxLength(100).IsRequired();

现在在我们的应用程序中,我们加载所有查找数据并缓存它。

var order = new Order
{
Name = "Bob"
OrderType = GetFromOurCache(5) //Get order type for id 5
};

var db = _db.GetContext();
db.Order.Add(order);
db.SaveChanges();

我们的漂亮订单已保存,但具有新的订单类型,由 EF 提供。所以现在我们的数据库中有两个相同的订单类型。我可以做些什么来改变这种行为?

TIA

最佳答案

对于 EF 4.1,您可以在调用 SaveChanges 之前执行此操作:

db.Entry(order.OrderType).State = EntityState.Unchanged;

关于c# - 保存实体导致重复插入查找数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5675710/

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