asp.net-mvc – 何时公开IEnumerable而不是ICollection?
发布时间:2020-12-15 19:49:24 所属栏目: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; set; }} 有了IEnumurable public class User{ publi
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_SessionId
- asp.net – 在资源文件中存储SQL查询是不好的做法吗?
- razor – 如何将值绑定到ASP.NET Core MVC中枚举中每个项的
- asp.net-mvc – MVC 5防止通过iframe访问内容
- 如何在aspx页面中隐藏ASP.NET自定义控件的属性?
- asp.net-mvc-3 – Global.asax.cs在服务器上不可见
- Asp.net mvc 知多少(七)
- asp.net – Html.RenderAction和Html.Action之间的区别
- asp.net – 当用户有多个角色时,位置授权如何工作?
- asp.net-mvc – 在mvc 4上获取当前文化或浏览器区域设置