Entity Framework 4 프로젝트 내에 '고객'POCO 엔터티가 있습니다. 내 Customer 엔티티를 ObjectSet이 아닌 generic리스트로 상위 레이어에 노출하고 싶습니다.EntityFramework 4 개체를 IObjectSet 대신 IList로 표시
나는 다음과 같이 보이는 IUnitOfWork 인터페이스가 :
나는 다음과 같은 한 (위의 인터페이스를 구현) 내 엔티티 프레임 워크 DAL에서 아래로public interface IUnitOfWork
{
string Save();
IList<Customer> Customers { get; }
}
:
public class EntityContainer : ObjectContext, IUnitOfWork
{
private IObjectSet<Customer> _customers;
public IList<Customer> Customers
{
get
{
if (_customers == null)
{
_customers = CreateObjectSet<Customer>("Customers");
}
return _customers.ToList<Customer>() ;
}
}
}
그러나 'CreateObjectSet ("고객") '선이 작동하지 않습니다. 새로운 '고객'을 추가하려고 할 때마다 아무 일도 일어나지 않습니다. 흥미롭게도 IObjectSet을 사용하면 코드가 작동합니다. 예 :
public interface IUnitOfWork
{
string Save();
IObjectSet<Contact> Contacts { get; }
}
public class EntityContainer : ObjectContext, IUnitOfWork
{
private IObjectSet<Customer> _customers;
public IObjectSet<Customer> Customers
{
get
{
if (_customers == null)
{
_customers = CreateObjectSet<Customer>("Customers");
}
return _customers;
}
}
}
IQueryable도 작동하지만 IList를 사용할 수 없으며 이유가 없습니다. 누구든지 어떤 아이디어?
#
원래 질문에 대한 수정. IQueryable을 사용하면 IEnumerable이 작동하지 않으며 작동하지 않습니다. 이는 고객 저장소가 엔티티 컬렉션에서 추가/삭제 (위의 예에서 고객 엔티티 추가 또는 제거)하기 위해 '추가'및 '삭제'메소드를 제공해야하기 때문입니다. IQueryable 또는 IEnumerable을 사용하면 개체를 추가하거나 제거 할 수 없습니다. 대신 ICollection 또는 IList를 사용해야합니다. 이 때문에 원래의 문제가 다시 해결됩니다. 내 컬렉션을 ObjectSet으로 저장소에 노출하고 싶지 않습니다. EntityFramework에 묶이지 않은 유형을 사용하고자합니다. 즉, 일반 목록을 사용하고 싶습니다.
더 많은 제안이 있습니까? 이 작업을 수행하는 간단한 방법이 있다고 생각하지만 프레임 워크에 익숙하지 않아서 알아낼 수 없습니다.
'IEnumerable'은 훨씬 더 일반적인 단어입니다. –