Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';在Asp.net C#、MVC、Codefirst应用程序中使用LINQ无法在多对多关系中获得预期的结果_C#_Sql Server_Asp.net Mvc_Linq_Ef Code First - Fatal编程技术网

Can';在Asp.net C#、MVC、Codefirst应用程序中使用LINQ无法在多对多关系中获得预期的结果

Can';在Asp.net C#、MVC、Codefirst应用程序中使用LINQ无法在多对多关系中获得预期的结果,c#,sql-server,asp.net-mvc,linq,ef-code-first,C#,Sql Server,Asp.net Mvc,Linq,Ef Code First,我正在尝试使用Asp.NETC#、MVC和Codefirst方法开发一个应用程序 我有两门课,一门是演员课,另一门是电影课,这两门课有很多对很多的关系。(一个演员可以有很多电影,一部电影可以有很多演员) 现在我面临一个问题,我可以从两个表中检索数据,但并不像预期的那样,我相信我的代码的逻辑在某些地方出了问题 例如,我可以从数据库中检索电影列表,当我单击每部电影时,它会将我重定向到属于该特定电影的页面,这在目前为止是有意义的,但现在我想检索在该特定电影中扮演角色的演员列表,但我失败了。(我可以检索

我正在尝试使用Asp.NETC#、MVC和Codefirst方法开发一个应用程序

我有两门课,一门是演员课,另一门是电影课,这两门课有很多对很多的关系。(一个演员可以有很多电影,一部电影可以有很多演员)

现在我面临一个问题,我可以从两个表中检索数据,但并不像预期的那样,我相信我的代码的逻辑在某些地方出了问题

例如,我可以从数据库中检索电影列表,当我单击每部电影时,它会将我重定向到属于该特定电影的页面,这在目前为止是有意义的,但现在我想检索在该特定电影中扮演角色的演员列表,但我失败了。(我可以检索数据库中存在的所有演员列表,但不能检索在特定电影中扮演角色的特定演员)

这些是我的模型:

这是Actor类:

public class Actors
{
    public int Id { get; set; }
    public string actor_name { get; set; }
    public string country_of_birth { get; set; }    
}
这是电影课:

public class Movies
{
   public int Id { get; set; }
   public string movie_title { get; set; }
   public string genre { get; set; }
}
这是控制器:

 public ActionResult Index()
 {
     var mv = _context.mvz;
     if (mv==null)
     {
         return Content("Nothing found in database");
     }
        return View(mv);
 }

 public ActionResult Details(int? Id)
 {
     var dtl = _context.mvz.SingleOrDefault(a=> a.Id == Id);
     var vm = new MoviesViewModel()
     {
         mvz = dtl,
     };
     if (vm==null)
     {
         return Content("Nothing Found!");
     }
        return View(vm);
  }
这是一个索引视图,显示电影列表,并有一个链接,分别显示每部电影的详细信息:

@model IEnumerable<ManyToMany_FinalProject.Models.Movies>
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}

<h5>List of Movies</h5>

<table class="table table-bordered table-hover table-responsive">
<thead>
    <tr>
        <th>Id</th>
        <th>Title</th>
    </tr>
</thead>
@foreach (var movie in Model)
{
    <tbody>
        <tr>
            <td>@movie.Id</td>
            <td>@Html.ActionLink(movie.movie_title,"Details","Movies",new { Id = @movie.Id},null)</td>      
        </tr>
    </tbody>
}
@model IEnumerable
@{
ViewBag.Title=“Index”;
Layout=“~/Views/Shared/_Layout.cshtml”;
}
电影列表
身份证件
标题
@foreach(模型中的var电影)
{
@电影
@ActionLink(movie.movie_标题,“细节”,“电影”,新的{Id=@movie.Id},空)
}

这是一个细节视图,它必须显示每部电影的详细信息,特别是它必须显示在该特定电影中扮演角色的演员列表

@model ManyToMany_FinalProject.ViewModel.MoviesViewModel
@{
ViewBag.Title = "Details";
Layout = "~/Views/Shared/_Layout.cshtml";
}

<h5>Details of @Model.mvz.movie_title</h5>

<table class="table table-bordered table-hover table-responsive">
<thead>
    <tr>
        <th>Id</th>
        <th>Title</th>
        <th>Genre</th>
    </tr>
</thead>

<tbody>
    <tr>
        <td>@Model.mvz.Id</td>
        <td>@Model.mvz.movie_title</td>
        <td>@Model.mvz.genre</td>
    </tr>
</tbody>
@model ManyToMany\u FinalProject.ViewModel.movieswiewmodel
@{
ViewBag.Title=“详细信息”;
Layout=“~/Views/Shared/_Layout.cshtml”;
}
@Model.mvz.movie_标题的详细信息
身份证件
标题
体裁
@Model.mvz.Id
@Model.mvz.movie_标题
@Model.mvz.genre

明星阵容@Model.mvz.movie\u title
身份证件
名称
国家
@foreach(Model.act中的var actor)
{
@演员身份证
@演员的名字
@演员。出生国
}
最后是视图模型:

 public class MoviesViewModel
{
    public Movies mvz { get; set; }
    public List<Actors> act { get; set; }
    public MoviesViewModel()
    {
        mvz = new Movies();
        act = new List<Actors>();
    }
}
公共类电影视图模型
{
公共电影mvz{get;set;}
公共列表动作{get;set;}
公共电影视图模型()
{
mvz=新电影();
act=新列表();
}
}
我知道我正在编写的用于检索控制器类中的参与者列表的LINQ逻辑有问题

如果任何有这方面专业知识的人正在阅读这篇文章,请用我应该用于LINQ的正确逻辑或帮助我获得结果的任何其他方法来指导我。

1)你必须在你的两个模特<代码>演员和<代码>电影

您将按照以下步骤进行操作

配置关系后,您的模型看起来像

public class Actors
{
    public Actors()
    {
        this.Movies = new HashSet<Movies>();
    }

    public int Id { get; set; }
    public string actor_name { get; set; }
    public string country_of_birth { get; set; }
    public virtual ICollection<Movies> Movies { get; set; }
}

public class Movies
{
    public Movies()
    {
        this.Actors = new HashSet<Actors>();
    }

    public int Id { get; set; }
    public string movie_title { get; set; }
    public string genre { get; set; }
    public virtual ICollection<Actors> Actors { get; set; }
}
3) 然后你将通过下面的动作方法得到你的电影和演员

public ActionResult Details(int? Id)
{
    //This will return single movie with your parameter id
    var mvz = _context.mvz.SingleOrDefault(a => a.Id == Id);

    //This will gives you actors of above movie. 
    var actrs = mvz.Actors.ToList();

    var vm = new MoviesViewModel()
    {
        mvz = mvz,
        actrs = actrs
    };

    if (vm == null)
    {
        return Content("Nothing Found!");
    }

    //This view model return your both of movie and its actors.
    //Capture both in your model and render in your view.
    return View(vm);
}

尝试一次可能会对您有所帮助:)

您必须将关系设置为
pk
fk
models@Prince瓦利扎达,看看答案可能是它对你有帮助:)非常感谢你,你帮了我很大的忙。但现在在数据录入阶段出现了新情况。我无法访问通过fluent API自动生成的中间表(MoviesActors表)。我想访问此表并通过包含数据输入表单的视图插入一些数据。让我更具体地说,在数据输入视图的顶部,我不能引用这个中间表:例如,在数据输入视图的顶部,我应该能够设置这样一个引用:@model Myproject.Models.MoviesActors,但是MoviesActors没有出现,因此我可以引用它。我还发布了一个关于这方面的新问题,可以通过以下链接向您提供更多详细信息:
public class YourDBContext : DBContext
{
    public YourDBContext() : base("YourDbConnectionString")
    {
    }

    public DbSet<Movies> Movies { get; set; }
    public DbSet<Actors> Actors { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        //If you face any problem that contains cascade delete then add below line.
        modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();

        base.OnModelCreating(modelBuilder);
    }
}
public class MoviesViewModel
{
    public Movies mvz { get; set; }
    public List<Actors> actrs { get; set; }
}
public ActionResult Details(int? Id)
{
    //This will return single movie with your parameter id
    var mvz = _context.mvz.SingleOrDefault(a => a.Id == Id);

    //This will gives you actors of above movie. 
    var actrs = mvz.Actors.ToList();

    var vm = new MoviesViewModel()
    {
        mvz = mvz,
        actrs = actrs
    };

    if (vm == null)
    {
        return Content("Nothing Found!");
    }

    //This view model return your both of movie and its actors.
    //Capture both in your model and render in your view.
    return View(vm);
}