asp.net-mvc – 何时公开IEnumerable而不是ICollection?
发布时间:2020-05-27 15:44:55 所属栏目:asp.Net 来源:互联网
导读:public class Order{ public int Id {get;set;} [DisplayName(User)] public long UserId { get; set; } [ForeignKey(UserId)] public virtual User User { get; set; } public decimal Amount { get; se
public class Order
{
public int Id {get;set;}
[DisplayName("User")]
public long UserId { get; set; }
[ForeignKey("UserId")]
public virtual User User { get; set; }
public decimal Amount { get; set; }
}
有了IEnumurable public class User
{
public int Id{get;set;}
public virtual IEnumerable<Order> Orders { get; set; }
}
public User GetWithOrders()
{
var myUser=UserRepository.GetByEmail("email@email.com");
myUser.Orders=OrderRepository.GetByUserId(myUser.Id);
return myUser;
}
使用ICollection public class User
{
public int Id{get;set;}
public virtual ICollection<Order> Orders { get; set; }
}
public User GetWithOrders()
{
var myUser=UserRepository.GetByEmail("email@email.com");
return myUser;
}
我没有使用IEnumerable进行导航属性的延迟加载.因此,我必须使用另一个查询获取此用户的订单. 我有ICollection的导航.所以我可以接到用户的订单.这看起来很酷.但是,我可以在Controller中向用户添加新订单,而无需使用服务或存储库. 它是在控制器级别上操纵数据.这是反模式吗? 解决方法
你的意思是你可以这样做(假设有一个用于向用户添加订单的视图模型和某个地方的SaveChanges()): public class UserController
{
public ActionResult AddUserOrder(AddUserOrderModel addOrder)
{
User user = User.GetByEmail(addOrder.UserEmail);
user.Orders.Add(addOrder.Order);
User.SaveChanges();
}
}
尤其是你可以执行user.Orders.Add(…),那么这就是从服务或存储库层公开实体类型的副作用. 如果要避免这种情况,则必须定义并公开包含要公开的成员的业务对象: public class UserBLL
{
public int Id { get; private set; }
public IEnumerable<Order> Orders { get { return _orders.AsEnumerable(); } }
private IEnumerable<Order> _orders;
public UserBLL(User user)
{
Id = user.Id;
_orders = user.Orders;
}
public void AddOrder(Order order)
{
_orders.Add(order);
}
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – 直接将.aspx转换为.pdf [已关闭]
- asp.net-mvc – 无法加载文件或程序集’WebMatrix.Data,版本
- ASP.NET Active Directory成员资格提供程序和SQL配置文件提
- ASP.NET网站内存使用率相当高
- asp.net-mvc – 使用Asp.net Mvc缩略图
- asp.net – IIS 7在一个服务器上引发web.config的“重复部分
- asp.net – 考虑Scalablity和友好URL的GUID替代方案
- asp.net – 缓存viewstate?
- 使用模块化设计组织良好的ASP.NET应用程序的最佳方法
- 在asp.net页面之间传递数据
推荐文章
站长推荐
- asp.net mvc调试器抛出SEHException
- asp.net-mvc-3 – CopyAllFilesToSingleFolderFo
- ASP.NET 2.0 JQuery AJAX登录
- ASP.NET ReportViewer Google Chrome CPU使用情况
- asp.net – .NET中的堆栈溢出将IIS发送到100%的
- asp.net-mvc – MVC应用程序部署; System.Data.S
- asp.net-mvc – RavenDB Ids和ASP.NET MVC3路由
- asp.net-mvc – ASP.NET MVC:部分知道它是否是从
- asp.net-web-api – ASP.NET WebApi自定义序列化
- asp经典 – 经典ASP文本替换和UTF-8编码
热点阅读
