【发布时间】:2012-11-19 16:30:45
【问题描述】:
我正在尝试设置从数据库中检索。
我有一个 EF(实体框架)对象 emUser 和一个从 emUser 继承的普通类 User,但添加了一些额外的功能。
public class User : emUser
{
#region Properties
public string Username
{
get { return Email; }
}
public string FullName
{
get { return FirstName + " " + LastName; }
}
#endregion
}
public partial class emUser : EntityObject
{
[code ...]
}
由于某种原因,虽然 User 继承自 emUser 我无法显式转换它们。 我正在使用的代码:
List<User> returnUsers = new List<User>();
var users =
(from u in edm.UserSet.OfType<emUser>()
select u);
if (users != null)
{
foreach (emUser user in users)
{
User newUser = (User)user;
returnUsers.Add(newUser);
}
}
return returnUsers;
我可以让User 成为 emUser 的包装器,但是每次对 emUser 进行更改时我都必须更改它。我想用User来区分技术服务层和领域层使用的类。
我收到如下错误消息:
{System.InvalidCastException: Unable to cast object of type 'Services.emUser' to type 'Users.User'. at Services.DatabaseController.GetUsers() in [file path]:line 412}
为什么我不能将 emUser 转换为 User?
【问题讨论】:
-
User是emUser,但emUser不是User。你不能那样做。 -
您为什么希望这种低调有效? EF 只能返回
EMUser对象——它知道的那些。对于它的价值,我认为模型层和服务层的并行数据结构是一个坏主意,也是对继承的不好使用。服务层与其下面的层进行通信的设计还不错。如果您需要使用不属于该层的模型类添加功能,请正交执行。 (使用以模型对象为参数的“常规”函数,或在服务层定义的扩展方法。)
标签: c# inheritance explicit-conversion