带有类库的.net mvc

本文关键字:net mvc 类库 | 更新日期: 2024-09-22 16:48:37

我创建了一个使用EF的项目(web)。该项目运行良好,我可以添加,检索,更新。我决定用一个类库。我正在尝试检索(比方说)电影列表,但它不起作用,给出了一些关于模型的错误
我做了什么:
在库类中创建了一个类,并向其中添加了一个返回电影列表的方法
库类

public static class LibMethods
{
    public static List<Movie> get_movies(Entities MovieEntity) //Model in Library Class
    {
        List<Movie> movies = new List<Movie>();
        var get_movies = from m in MovieEntity.Movie
                          select m;
        if (get_movies.Any())
        {
            foreach (var item in get_movies)
            {
                movies.Add(item);
            }
        }
        return movies;
    }
}

控制器类(MVC)

List<WebAppWithEF.Models.Movie> listMovies = LibMethods.get_movies(new WebAppWithEF.Models.MovieEntities()); //Model in Web Project

我不明白为什么它没有通过,导致一个关于无效论点的错误。即使我删除了这个参数,它也说它不能将库类模型电影隐含地转换为WebApp模型电影
更新
我有两个生成的模型(一个在webApp中,一个在库类中),显然它们不能一起工作,所以我第一次尝试从库中删除模型(但我需要在库中使用ef模型),因此我切换并将ef模型留在库项目中;使用(EF生成的DB的)lib项目连接字符串&将该连接字符串放置在我的webApp 的web.config中

带有类库的.net mvc

您的问题似乎是MovieEntity.Movie和Movie(来自WebApp)模型具有相同的名称,但类型不等效。您需要使用AutoMapper之类的东西将数据从MovieEntity.Movie复制到Movie,或者您可以在方法或模型对象的构造函数中手动复制属性,例如:

public class Movie
{
    public string Title { get; set; }
    public Movie(MovieEntities.Movie movie)
    {
        this.Title = movie.Title;
    }
}

更重要的是,你不需要每次都传入MovieEntity的新实例,否则你会泄露EF中的连接。

您应该更新get_movies()。

public static class LibMethods
{
    public static List<Movie> get_movies(Entities MovieEntity) //Model in Library Class
    {
       var movies = from m in MovieEntity.Movie
                      select m;
        return movies.ToList();
    }
}