在asp.net MVC Web应用程序中覆盖我的ICollection的最佳appraoch是我的edmx文件中的IList

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应该避免修改自动生成的文件,因为如果我重新映射数据库表,我的修改将被覆盖.

Nec*_*ras 6

如果您确实需要将所有ICollection对象修改为IList对象,那么正确的位置就是在T4模板中.它们是edmx中的".tt"文件.这些是用于生成项目其余部分使用的代码文件的模板.每当您更新edmx时,对这些模板所做的任何修改都将通过您的项目传播.

也就是说,我怀疑你是否真的需要做出这个改变.您最好将数据库中的返回类型保持为通用,然后将其缩小到您将要使用它的List(或其他).

  • @johnG答案的第一部分是*如何做你想做的事情*.我不知道你还需要什么. (3认同)