【问题标题】:Relationship between tables not showing in asp.net mvc5在 asp.net mvc5 中未显示的表之间的关系
【发布时间】:2016-12-17 12:52:09
【问题描述】:

我正在构建一个 asp.net 应用程序。我有两个类,一个是电影类,一个是导演类,我在其中实现了多对多的关系。

导演类

public class Director
{
    private ICollection<Film> _films;

    public Director()
    {
        _films = new List<Film>();
    }

    public int DirectorID { get; set; }

    public string fName { get; set; }

    public string lName { get; set; }

    public int Age { get; set; }

    public virtual ICollection<Film> Films
    {
        get { return _films; }
        set { _films = value; }
    }
}

电影课

public class Film
{
    private ICollection<Director> _directors;

    public Film()
    {
        _directors = new List<Director>();
    }

    public int FilmId { get; set; }

    public string Name { get; set; }

    public int Minutes { get; set; }

    public string AgeClassification { get; set; }

    public virtual ICollection<Director> Directors
    {
        get { return _directors; }
        set { _directors = value; }
    }
}

种子法

protected override void Seed(FilmNetwork.Models.FilmNetworkContext context)
    {

        var films = new List<Film>
            {
                new Film() { FilmId = 1, Name = "The Dark Knight", Minutes = 152, AgeClassification = "15A" },
                new Film() { FilmId = 2, Name = "The Social Network", Minutes = 120, AgeClassification = "15A" },
                new Film() { FilmId = 3, Name = "Up In The Air", Minutes = 109, AgeClassification = "15A" },
                new Film() { FilmId = 4, Name = "Slumdog Millionaire", Minutes = 120, AgeClassification = "15A" },
                new Film() { FilmId = 5, Name = "The Wolf Of Wall Street", Minutes = 180, AgeClassification = "18" },
                new Film() { FilmId = 6, Name = "King Kong", Minutes = 221, AgeClassification = "12" },
                new Film() { FilmId = 7, Name = "Schindler's List", Minutes = 195, AgeClassification = "18" }
            };
            films.ForEach(f => context.Films.AddOrUpdate(film => film.Name, f));
            context.SaveChanges();



        var directors = new List<Director>
            {
                new Director() { DirectorID = 1, fName = "Christopher", lName = "Nolan", Age = 46,
                    Films = films.Where(f => (f.Name == "The Dark Knight")).ToList()},
                new Director() { DirectorID = 2, fName = "David", lName = "Fincher", Age = 54,
                    Films = films.Where(f => (f.Name == "The Social Network")).ToList() },
                new Director() { DirectorID = 3, fName = "Jason", lName = "Reitman", Age = 39,
                    Films = films.Where(f => (f.Name == "Up In The Air")).ToList() },
                new Director() { DirectorID = 4, fName = "Danny", lName = "Boyle", Age = 60,
                    Films = films.Where(f => (f.Name == "Slumdog Millionaire")).ToList() },
                new Director() { DirectorID = 5, fName = "Martin", lName = "Scorsese", Age = 74,
                    Films = films.Where(f => (f.Name == "The Wolf Of Wall Street")).ToList() },
                new Director() { DirectorID = 6, fName = "Peter", lName = "Jackson", Age = 55,
                    Films = films.Where(f => (f.Name == "King Kong")).ToList() },
                new Director() { DirectorID = 7, fName = "Steven", lName = "Spielberg", Age = 70,
                    Films = films.Where(f => (f.Name == "Schindler's List")).ToList() },
            };
            directors.ForEach(d => context.Directors.AddOrUpdate(director => director.lName, d));
            context.SaveChanges();

我有一个基于 id 的制片人电影的 ajax 搜索。它返回电影,导演字段的导演是空白的,因为某种原因没有实现关系。

【问题讨论】:

    标签: c# asp.net relational-database


    【解决方案1】:

    你应该在这里添加导演:

    new Film() { FilmId = 1, Name = "The Dark Knight", Minutes = 152, AgeClassification = "15A"  }
    

    你也绝对需要多对多的关系吗?电影有多于一位导演的情况并不多,因此添加一对多关系会更简单。

    如何实现一对多关系:

    导演类

    public class Director
    {
    
    
    
        public int DirectorID { get; set; }
    
        public string fName { get; set; }
    
        public string lName { get; set; }
    
        public int Age { get; set; }
    
        public virtual ICollection<Film> Films{get;set;}
    
    }
    

    电影课

    public class Film
    {
    
    
    
        public int FilmId { get; set; }
    
        public string Name { get; set; }
    
        public int Minutes { get; set; }
    
        public string AgeClassification { get; set; }
    
        public virtual Director Director { get; set; }
    }
    

    然后像这样添加它:

    new Film() { FilmId = 1, Name = "The Dark Knight", Minutes = 152, AgeClassification = "15A" Director = _context.directors.where(x=> x.ID == "1"// or whichever parameter you want to find director from list)  }
    

    【讨论】:

    • 我不需要多对多,但我不知道如何实现一对多:) :)
    猜你喜欢
    • 2020-07-27
    • 2016-04-05
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 2019-06-06
    • 1970-01-01
    • 2015-11-23
    相关资源
    最近更新 更多