保存实体会导致重复插入到查找数据中 [英] Saving Entity causes duplicate insert into lookup data

查看:121
本文介绍了保存实体会导致重复插入到查找数据中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



给定:

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

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

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

  //订单
ToTable(order);
HasKey(key => key.Id);
属性(item => item.Id).HasColumnName(order_id)。HasColumnType(int);
属性(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);

属性(item => item.Id).HasColumnName(order_type_id)。HasColumnType(int);
属性(item => item.Name).HasColumnName(name)。HasColumnType(nvarchar)。HasMaxLength(100).IsRequired();

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

  var order = new Order 
{
Name =Bob
OrderType = GetFromOurCache(5)//获取订单类型为5
};

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

我们的优雅订单已保存,但使用新的订单类型,由EF提供​​。所以现在我们在数据库中有两个相同的顺序类型。我可以做些什么来改变这个行为?



TIA

解决方案

使用EF 4.1,您可以在调用 SaveChanges 之前进行此操作:

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


I am using EF 4.1 "code first" to create my db and objects.

Given:

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; }
}

An order has one ordertype. An order type is just a look up table. The values dont change. Using 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(); 

Now in our App we load all our lookup data and cache it.

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();

Our you-beaut order is saved but with a new order type, courtesy of EF. So now we have two same order types in our database. What can I do to alter this behaviour?

TIA

解决方案

With EF 4.1 you can do this before calling SaveChanges:

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

这篇关于保存实体会导致重复插入到查找数据中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆