Entity framework 4 实体框架:I不&x27;我不理解EntityCollection.Attach和EntityReference.Attach的用途
Entity framework 4 实体框架:I不&x27;我不理解EntityCollection.Attach和EntityReference.Attach的用途,entity-framework-4,Entity Framework 4,ObjectContext.Attach和ObjectSet.Attach用于将分离的实体(已存在于数据库中)附加到上下文–这种方式在调用ObjectContext.SaveChanges时,EF不会尝试为此附加的实体发送insert命令 但是我不明白EntityCollection.Attach和EntityReference.Attach的目的。也就是说,这两种方法只能附加已由ObjectContext管理的实体(因此,它们不能用于附加EntityState设置为Added或Distache
ObjectContext.Attach
和ObjectSet.Attach
用于将分离的实体(已存在于数据库中)附加到上下文–这种方式在调用ObjectContext.SaveChanges时,EF不会尝试为此附加的实体发送insert命令
但是我不明白EntityCollection.Attach
和EntityReference.Attach
的目的。也就是说,这两种方法只能附加已由ObjectContext
管理的实体(因此,它们不能用于附加EntityState
设置为Added
或Distached
的实体)
由于ObjectContext
管理的实体已经自动解析了它们的关系(即它们的EntityReference
属性返回父实体,而它们的EntityCollection
属性包含相关的子实体),我无法理解使用EntityCollection.Attach
或EntityReference.Attach
将相关实体E1附加到特定实体E2,因为E1已经通过ObjectContext
自动附加到E2
如果您在ObjectContext中有一位客户,并且希望获得该客户,请以您为例感谢您 客户的预订,您可以拨打以下电话:
myCust.Reservations.Load()
这将加载该客户的所有预订。
但是,如果要筛选这些保留,可以在中使用CreateSourceQuery-
stead,如以下代码所示:
var customer=context.Contacts.OfType<Customer>().First();
var sourceQuery = customer.Reservations.CreateSourceQuery()
.Where(r => r.ReservationDate > new DateTime(2008, 1, 1));
customer.Reservations.Attach(sourceQuery);
var customer=context.Contacts.OfType().First();
var sourceQuery=customer.Reservations.CreateSourceQuery()
其中(r=>r.ReservationDate>newdatetime(2008,1,1));
customer.Reservations.Attach(sourceQuery);
调用Attach方法时将执行查询。现在,只有该客户的预订子集将从数据库中检索并具体化为
对象
还可以使用CreateSourceQuery对类型进行筛选。在以下代码中,“附加”是
与实体引用一起使用,这将不需要IQueryable。相反,你需要
传入一个对象,可以使用FirstOrDefault查询方法获取该对象。自从
Attach将引发异常如果您试图传入null,则需要测试null
在呼叫附件之前:
var addresses = context.Addresses.Take(5);
foreach (var a in addresses)
{
var sq = a.ContactReference.CreateSourceQuery()
.OfType<Customer>().FirstOrDefault();
if (sq != null)
a.ContactReference.Attach(sq);
}
var addresses=context.addresses.Take(5);
foreach(地址中的变量a)
{
var sq=a.ContactReference.CreateSourceQuery()
.OfType().FirstOrDefault();
如果(sq!=null)
a、 联系参考。附件(sq);
}
有了这段代码,只会加载客户。hi,以我目前的EF编程经验(几乎不存在),我觉得CreateSourceQuery并没有那么有用。EntityCollection.Attach和EntityReference.Attach在其他情况下有用吗?