我在课堂上有这个方法:
member this.GetDbSet<'TEntity, 'TDTO, 'TKey when 'TKey :> IEquatable<'TKey> and 'TEntity :> IEntity<'TKey> and 'TEntity : not struct and 'TDTO :> IDTO<'TKey> and 'TEntity : equality and 'TEntity : null and 'TDTO : equality and 'TDTO : null and 'TKey : equality>(repository : BaseRepository<'TEntity, 'TDTO, 'TKey>) =
repository.DbSetFuncGetter().Invoke(uow.Context())
但是当我构建项目时,我得到了这个错误
This code is not sufficiently generic. The type variable 'TEntity when 'TEntity :> IEntity<'TKey> and 'TEntity : not struct and 'TEntity : equality and 'TEntity : null and 'TKey :> IEquatable<'TKey> and 'TKey : equality could not be generalized because it would escape its scope.
但是所有的限制都存在。我错过了什么吗?
编辑:
如果您需要更多代码:
这是开源项目
答案 0 :(得分:2)
我不知道为什么我的代码显示了错误消息,但我找到了解决方法并且我在GitHub项目上提交了。您可以检查此文件上的差异,因为它比描述它更容易阅读。
该链接包含解决问题的差异,但我会在接下来的行中解释。
我用解决方法解决了它,我不知道它为什么显示。
在存储库类(问题中的存储库类,而不是方法的类)中有以下成员:
let mutable dbSetFunc : Func<DbContext, DbSet<'TEntity>> = null
member this.DbSetFunc
with set (value) = dbSetFunc <- value
member this.DbSetFuncGetter() = dbSetFunc
但是他们产生了错误,我发现它正在尝试对它们进行评论,我将它们更改为这些
[<DefaultValue>] val mutable dbSetFunc : Func<DbContext, DbSet<'TEntity>>
member this.DbSetFunc
with set (value) = this.dbSetFunc <- value
member internal this.DbSetFuncGetter() = this.dbSetFunc
我无法解释为什么这会解决这个错误,至少我希望这会有所帮助。
问题中的方法保持不变。