我有两个类PostSM和Post和一个BaseService类。我的BaseService类是一个通用类,并获得两种类型的类TEntity和TServiceModel。此类将TServiceModel转换为TEntity并将其保存在数据库中。我的问题是如何将TServiceModel转换为TEntity。我明确地将Post转换为PostSM,将PostSM转换为Post int PostSM类。
public class PostSM
{
public int Id { get; set; }
public string Title { get; set; }
public string Body { get; set; }
public RowVersion string { get; set; }
public static explicit operator PostSM(Post post)
{
if (post == null)
return null;
else
{
PostSM postSM = new PostSM()
{
Id = post.Id,
Title = post.Title,
Body = post.Body,
RowVersion = post.RowVersion
};
return postSM;
}
}
public static explicit operator Post(PostSM postSM)
{
if (postSM == null)
return null;
else
{
Post post = new Post()
{
Id = postSM.Id,
Title = postSM.Title,
Body = postSM.Body,
RowVersion = postSM.RowVersion
};
return post;
}
}
}
public class Post
{
public int Id { get; set; }
public string Title { get; set; }
public string Body { get; set; }
public string RowVersion { get; set; }
}
我有一个名为BaseService的类
public class BaseService<TServiceModel, TEntity>
where TEntity : class
where TServiceModel : class
{
public virtual TServiceModel Add(TServiceModel serviceModel)
{
try
{
TEntity entity = (TEntity)serviceModel;
//var addedEntity = repo.Add(entity);
//uow.SaveChanges();
return serviceModel;
}
catch (Exception)
{
throw;
}
}
}
正如我在第一个问题中提到的那样,在BaseService类的Add Method中,我需要将PostSM转换为Post,但是由于BaseService是泛型类,因此我不知道该怎么做。
TEntity entity = (TEntity)servieMoel;
在我的Add方法中,此行出现错误。
实际上,您无法执行此操作,关于通用类型TEntity和TServiceModel的信息一无所知,因此除赋值外没有其他操作。
您应该为TServiceModel使用接口而不是运算符。喜欢
interface IConvert<TTo>
{
TTo Convert()
}
在您的班级PostSM中实现此接口
class PostSM : IConvert<Post>
{
public Post Convert() => (Post)this;
// or put your explicit operator code here
}
最后对您的实现施加约束
public class BaseService<TServiceModel, TEntity>
where TEntity : class
where TServiceModel : class, IConvert<TEntity>
这将使您可以致电
TEntity entity = serviceModel.Convert();
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句