2011-04-11 5 views
8

저는 엔터티 프레임 워크 코드의 첫 번째 방법을 사용하고 있으며 데이터 액세스를 제공하는 일반 Repository 클래스를 작성하고 있습니다. 이 수업에서는 Add(T entity) 방법을 원합니다. 그러나, DbSet<T> 클래스의 일부로서 더 InsertOnSubmit 방법이없고, 나는 Add 방법을 사용하려고하면, 나는 컴파일 타임 오류 얻을 :Entity Framework 4 코드를 사용하여 DbContext.DbSet의 InsertOnSubmit 해당 항목

public TEntity Add(TEntity entity) 
{ 
    return _database.Set<TEntity>().Add(entity); 
} 

:이 방법

The type 'TEntity' must be a reference type in order to use it as parameter 'TEntity' in the generic type or method 'System.Data.Entity.DbContext.Set<TEntity>()' 

을 누구든지이 문제를 해결할 방법을 알고 있습니까?

감사

+0

, 내가 "_database은"응용 프로그램에서 무엇인지 질문을 할 수있어? 나는 당신과 같은 메서드를 만들기 위해 노력하고 그것은 Set 메서드에 대해 불평합니다. 미리 감사드립니다! –

+0

예, _database 필드는 엔터티 프레임 워크에있는 DbContext 유형입니다. 엔티티 프레임 워크 4 코드의 첫 번째 접근법에 대한 ScotGu의 블로그를 살펴보십시오. 정말 간단합니다. http://weblogs.asp.net/scottgu/archive/2010/07/16/code-first-development-with-entity-framework -4.aspx – jcvandan

+0

고마워요. 나는 읽는다. 나는 보너스 질문을 가지고있다 : P .Set 메서드, 그 코드는 무엇인가? 나는 articel에서 아주 빨리 가져 갔고, 그 방법을 발견하지 못했다. 그게 내 프로젝트를 완료하는 데 필요한 코드의 마지막 부분입니다. 당신이 내게 .Set 메소드 코드를 보내면 내 메일을 받겠다. : D –

답변

12

이 저장소 클래스에 제네릭 제약 조건을 추가 ...이 사람을 도움이되기를 바랍니다 : 개인적인 용도로

public class Repository<TEntity> where TEntity : class 
+0

멋진 해결책입니다. +1 – jcvandan

5
말 그대로 그냥이 질문을 게시 그러나 나는이 문제를 해결하는 방법을 발견했다

- 설정 (T 형) 대신과 같이 일반 버전의 방법을 사용

public TEntity Add(TEntity entity) 
{ 
    return (TEntity)_database.Set(typeof(TEntity)).Add(entity); 
} 

을 약간의 인텔리 센스 검사가 먼 길을 간다!