因此,这是我正在构建的引导类库:
class BaseEntity<TKey>
{
TKey Id { get; set; }
}
interface ICrudRepository<TItem, TKey> where TItem : BaseEntity<TKey>
{
void Create(TItem item);
}
class MyCrudRepository<TItem, TKey> : ICrudRepository<TItem, TKey> where TItem : BaseEntity<TKey>
{
IEnumerable<TItem> _items;
void Create(TItem item)
{
item.Id = GetNewId();
}
TKey GetNewId()
{
// what should I do here?
// with int, this would be
// return _items.Select(x => x.Id).DefaultIfEmpty().Max() + 1;
}
}
我当前的BaseEntity没有ae TKey
参数,它仅使用和INT
存储该项目的密钥,但是我如何扩展它以支持泛型类型作为TKey?说Guid
?
例如,如何处理新项目的生成(请参见GetNewId
)?
如果是序列类型,它应该只使用现有的集合并返回最大的数字,但是在Guid
上,即它应该只生成另一个。
答案 0 :(得分:1)
对于注释,唯一的解决方案是让使用者根据其自身的逻辑及其BaseEntity类型生成ID,因此只需将GetNewId
抽象即可。
这是相关代码
public class MyCrudRepository<TItem, TKey....etc
{
[...]
public abstract TKey GetNewId();
}