【发布时间】:2011-04-15 11:01:12
【问题描述】:
我使用 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();
我们的 you-beaut 订单已保存,但有一个新的订单类型,由 EF 提供。所以现在我们的数据库中有两个相同的订单类型。我可以做些什么来改变这种行为?
TIA
【问题讨论】:
标签: c# entity-framework-4 ef-code-first entity-framework-4.1