2013-11-27 3 views
0

Я пытаюсь добавить общий метод Insert с помощью GetTable() с моим шаблоном репозитория с EntityFramework (надеюсь, у меня есть правильный рисунок)Использование GetTable() дает ошибку «тип T должен быть ссылочным типом»

Но я получаю сообщение об ошибке, как показано в комментарии ниже.

Я действительно хочу, чтобы вставить записи в базе данных, независимо от типа таблицы Любая помощь очень ценится :)

Это мой BaseRepository общий класс

public abstract class BaseRepository<T> 
{ 
    private static DBEntities dbEntities; 

    public BaseRepository() 
    { 
     dbEntities = new DBEntities(); 
    } 
    public IQueryable GetTable<T>(T entity) where T : class 
    { 
    return dbEntities.CreateObjectSet<T>(); 
    } 

public void Insert<T>(T obj) 
{ 
    //the line below gives an error 'The Type T must be a reference type 
    // in order to use it as parameter T. I HAVE tried adding ref here 
    // and in GetTable method, but same error 
    var table = GetTable(obj);   
    int saveChanges = dbEntities.SaveChanges(); 

} 

}

+1

1) Если класс имеет общий тип pe, вы не должны повторять этот параметр в методах. 2) Ограничение 'T: class' должно быть в' BaseRepository ', а не на методах. – CodesInChaos

+0

«Я попробовал добавить ссылку здесь» предлагает путаницу в вашем уме между ссылочными * типами * и ссылочными * параметрами *, которые можно было бы очистить путем тщательного чтения [Параметр, проходящий в C#] (http: //www.yoda .arachsys.com/csharp/parameters.html) – AakashM

ответ

1

Try измените свой код:

public abstract class BaseRepository<T> where T : class 
{ 
    private static DBEntities dbEntities; 

    public BaseRepository() 
    { 
     dbEntities = new DBEntities(); 
    } 
    public IQueryable GetTable(T entity) 
    { 
     return dbEntities.CreateObjectSet<T>(); 
    } 

    public void Insert(T obj) 
    { 
     //the line below gives an error 'The Type T must be a reference type 
     // in order to use it as parameter T. I HAVE tried adding ref here 
     // and in GetTable method, but same error 
     var table = GetTable(obj);   
     int saveChanges = dbEntities.SaveChanges();  
    } 
} 
+0

Это сработало. Я не должен был ставить < T > рядом с именами методов: D thx –

Смежные вопросы