joh*_* Gu 2 asp.net-mvc edmx asp.net-mvc-4 entity-framework-6
我正在研究ASP.NET MVC Web应用程序.我使用ADO.NET Entity Framework映射了我的数据库表,该框架生成了一个.edmx文件.现在,生成.edmx文件的一个限制是,所有表示父子关系的集合都将被定义为ICollection.例如,我有这个问题模型类: -
public Question()
{
this.Anwers = new HashSet<Anwer>();
}
public int Id { get; set; }
public string QuestionDesc { get; set; }
public int Order { get; set; }
public bool Active { get; set; }
public virtual ICollection<Anwer> Answers { get; set; }
Run Code Online (Sandbox Code Playgroud)
这是答案模型: -
public partial class Anwer
{
public Anwer()
{
this.UserFormsAnswers = new HashSet<UserFormsAnswer>();
}
public int Id { get; set; }
public string AnwerDesc { get; set; }
public int QuestionID { get; set; }
public bool Correct { get; set; }
public virtual Question Question { get; set; }
public virtual ICollection<UserFormsAnswer> UserFormsAnswers { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在用的问题ICollection相比,IList<>是我不能使用索引来获取相关的问题的答案的值.如果我有IList<>而不是ICollection<>我可以索引问题的答案.
所以我的问题是什么是重写我的最好appraoch public virtual ICollection<Anwer> Answers { get; set; }是public virtual IList<Anwer> Answers { get; set; }?当然,.edmx应该避免修改自动生成的文件,因为如果我重新映射数据库表,我的修改将被覆盖.
如果您确实需要将所有ICollection对象修改为IList对象,那么正确的位置就是在T4模板中.它们是edmx中的".tt"文件.这些是用于生成项目其余部分使用的代码文件的模板.每当您更新edmx时,对这些模板所做的任何修改都将通过您的项目传播.
也就是说,我怀疑你是否真的需要做出这个改变.您最好将数据库中的返回类型保持为通用,然后将其缩小到您将要使用它的List(或其他).