c# - The type '' cannot be used as type parameter 'T' in the generic type or method ''. There is no implicit reference conversion from '' to '' -
i generated linq -to -entity model database , modified - i've made interface :
public interface ivalid { byte valid{ get; set; } }
and make generated classes inherit interface.
i've wrote generic class access tables database:
public list<t> getvalidrecords<t>() t: class, ivalid { try { return _context.set<t>().where(x => x.valid == 1).tolist(); } catch (exception ex) { throw new exception(ex.message); } }
when call method in unit test
var records = repositary.getvalidrecords<tablename>();
i error -
the type 'tablename' cannot used type parameter 't' in generic type or method 'getvalidrecords()'. there no implicit reference conversion 'tablename' 'ivalid'.
how fix it?
edit: table class:
public partial class tablename: ivalid { public byte isvalid { get; set; } }
edit2: calling method:
public void getvalidrecordsgenerictest() { var data = new list<tablename> { new tablename() {valid = 1}, new tablename() {valid = 1} }.asqueryable(); var mockset = new mock<dbset<tablename>>(); mockset.as<iqueryable<tablename>>().setup(m => m.provider).returns(data.provider); mockset.as<iqueryable<tablename>>().setup(m => m.expression).returns(data.expression); mockset.as<iqueryable<tablename>>().setup(m => m.elementtype).returns(data.elementtype); mockset.as<iqueryable<tablename>>().setup(m => m.getenumerator()).returns(data.getenumerator()); var mockcontext = new mock<entities>(); mockcontext.setup(x => x.tablenames).returns(mockset.object); var database = new database(mockcontext.object); var records = database.getvalidrecords<tablename>(); // here error assert.areequal(2, records.count, "wrong number of gueltig records."); }
tablename
should work:
class tablename : ivalid { // implement ivalid }
also make sure class tablename
implements same ivalid interface used in method getvalidrecords
, i.e. ivalid
correct namespace.
Comments
Post a Comment