EntityFramework가 EAV 모델을 지원할 수 있습니까? 이것은 실행 가능한 시나리오입니까, 아니면 악몽입니까? 나는 시스템을 위해 EAV 모델을 사용하고 싶다. 가능한 한 EF를 포용하고 싶지만, 나는이 두 철학이 충돌하고 있다고 우려하고있다.EntityFramework는 EAV 모델을 지원할 수 있습니까?
6
A
답변
9
응용 프로그램에서 EAV를 사용하는 방법은 어떻게 달라질까요? EF는이지도하는 데 사용할 수 있습니다
public partial class Entity
{
// Key
public virtual int Id { get; set; }
// Other common properties
// Attributes
public virtual ICollection<EavAttriubte> Attributes { get; set; }
}
// The simplest implementation
public class EavAttribute
{
// Key
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual string Value { get; set; }
}
가 이것은 무엇을 지속 할 수 있고 무엇을하는 것은 Linq에 - 투 - 엔티티 조회 할 수있다. 이제 도우미 속성을 정의하여 엔티티를 사용할 수있게 만들 수 있습니다 (응용 프로그램에서만 사용할 수 있지만 지속성이나 쿼리에서는 사용할 수 없음).
public partial class Entity
{
// Just example without error handling
public decimal Price
{
get
{
return Int32.Parse(Attributes.Single(a => a.Name == "Price"));
}
set
{
Attributes.Single(a => a.Name == "Price").Value = value.ToString();
}
}
}
이 때문에 변환 및 수집 검색의 아주 좋은되지 않습니다 : 선택적 속성이 여전히 모음에 액세스해야합니다 -이 도우미 속성는 항상 개체 유형을 위해 존재 잘 알려진 속성에 대해서만 사용할 수 있습니다. 데이터에 여러 번 액세스하면 여러 번 실행됩니다.
나는 그것을 시도하지 않았다 그러나 나는이 각 엔티티에 의해 유사한 인터페이스를 구현하여 방지 할 수 있다고 생각 :
public interface IEavEntity
{
// loads attribute values from Attributes collection to local fields
// => conversion will be done only once
void Initialize();
// saves local values back to Attributes collection
void Finalize();
}
지금 당신이
ObjectContext
에
ObjectMaterialized
및
SavingChanges
이벤트를 처리합니다. 첫번째 핸들러에서 구체화 된 오브젝트가
IEavEntity
을 두 번째 핸들러에 구현하는 경우
Initialize
을 실행하면
ObjectStateManager
을 반복하여
IEavEntity
을 구현하는 모든 갱신 또는 삽입 된 엔티티를 가져오고
Finalize
을 실행합니다. 다음과 같음 :
public void OnMaterialized(object sender, ObjectMaterializedEventArgs e)
{
var entity = e.Entity as IEavEntity;
if (entity != null)
{
entity.Initialize();
}
}
public void SavingChanges(object sender, EventArgs e)
{
var context = sender as ObjectContext;
if (context != null)
{
foreach (var entry in context.ObjectStateManager.GetObjectStateEntries(
EntityState.Added | EntityState.Modified))
{
if (!entry.IsRelationship)
{
var entity = entry.Entity as IEavEntity;
if (entity != null)
{
entity.Finalize();
}
}
}
}
}
관련 문제
- 1. EAV 모델을 생성하는 SQL 문은 어디에서 찾을 수 있습니까?
- 2. 프로세서는 RTOS를 지원할 수 있습니까?
- 3. eager loading을 지원할 수 있습니까?
- 4. 어떻게 eav 필드에 데이터를 저장할 수 있습니까?
- 5. Selenium은 Hibernate 또는 Spring을 지원할 수 있습니까?
- 6. rsync는 일대 다 동기화를 지원할 수 있습니까?
- 7. DataObjects.NET에서 SQL ID 열을 지원할 수 있습니까?
- 8. 팀 기능으로 일정 기능을 지원할 수 있습니까?
- 9. ExtJS GridPanel이 열 그룹을 지원할 수 있습니까?
- 10. MySQL이 데이터베이스 전자 메일을 지원할 수 있습니까?
- 11. Visual Studio에서 자체 DSL을 지원할 수 있습니까?
- 12. Squeak VM이 실시간 GC를 지원할 수 있습니까?
- 13. SSRS는 멀티 테넌트 사용을 지원할 수 있습니까?
- 14. eav 디자인에서 여러 값을 갖는 하나의 속성을 가질 수 있습니까?
- 15. 아래 linqtosql을 사용하는 EntityFramework는 무엇입니까?
- 16. iPhone3.0의 Gamekit 서버에서 지원할 수있는 클라이언트 수
- 17. EAV 솔루션/패키지/공급 업체?
- 18. AutoCAD 구조 추출을 지원할 라이브러리가 있습니까?
- 19. EAV 테이블을 사용하는 '소프트 삭제'솔루션에 문제가 있습니까?
- 20. EAV 데이터 모델로 NHibernate 사용하기
- 21. 내 cakephp의 EAV
- 22. EntityFramework는 Access 2007 db (.accdb)에 대해 작동합니까?
- 23. EntityFramework는 C#으로 실제 생활에서 어떻게 사용됩니까?
- 24. ASP.NET 웹 서비스가 HTTP 이외의 다른 프로토콜을 지원할 수 있습니까?
- 25. 웹 배포 프로젝트가 자동 설치를 지원할 수 있습니까?
- 26. Twilio는 40 명이 넘는 사용자가있는 컨퍼런스를 지원할 수 있습니까?
- 27. MS Access 2007은 다중 사용자 환경을 지원할 수 있습니까?
- 28. 일부 화면 크기에서는 두 가지 방향을 모두 지원할 수 있습니까?
- 29. 어떤 프로그래밍 언어가 돌연변이 테스트를 지원할 수 있습니까?
- 30. 단일 연결에서 여러 데이터베이스 트랜잭션을 지원할 수 있습니까?