我正在尝试为包含对其他对象的引用的对象创建一些。
例如,
public class Person
{
public int ID { get; set; }
public string Name { get; set; }
public ICollection<Subscription> Subscriptions { get; set; }
}
public class PersonSubscription
{
[Key, Column(Order = 1)]
public int PeopleID { get; set; }
public Person People { get; set; }
[Key, Column(Order = 2)]
public int SubscriptionID { get; set; }
public Subscription Subscription { get; set; }
}
public class Subscription
{
public int ID { get; set; }
public string Magazine { get; set; }
public ICollection<PersonSubscription> Subscriptions { get; set; }
}
在上面的示例中,当我创建一个新Person时,我希望允许将该人添加到多个新订阅或现有订阅中。因此,这意味着需要以某种方式使视图了解系统中的现有订阅。此外,在相关说明中,当添加以前不存在的订阅时,它需要创建一个新实例并将其添加到所有相应的数据库中。
我可能会过度思考这个 - 我考虑过创建一个自定义模型绑定器(enter link description here),但我不确定这对于这是否有点过分。
答案 0 :(得分:1)
我不会用模型绑定器来做这件事。模型绑定是一个基础架构问题,框架的DefaultModelBinder
可以很好地处理。当您需要执行类似绑定到没有无参数构造函数的模型或自动填充请求或http上下文中的属性时,请使用自定义模型绑定器。
当您说您希望将某人添加到一个或多个订阅时,这是您系统中的业务规则,而不是基础架构问题。因此,使用自定义模型绑定器执行此操作将是对模型绑定自定义挂钩的误用。执行此操作的适当位置是在接受创建新人员请求的控制器操作中,或者是某个较低层,而不是MVC管道本身。
如果没有更好地描述你想要完成的任务,我认为你不会得到一个非常有用的答案。你是说你的观点应该有一个Person.Name的文本框,可能还有一个杂志列表,旁边有一个复选框?可能还有另一个文本框进入自定义杂志?请在你的问题中澄清。