连接 Entity Framework 中的 3 个表
Connection with 3 tables in Entity Framework
我在 SQL 数据库中有 3 个 table:Movies
、Viewer
和 Movies_Viewer
(=显示哪个观众看过哪部电影) .
客户端将插入 Viewer
名称和 Movie
名称以及 Entity Framework,我想将其插入到我拥有的 3 table 中(使用 linq例如),但我怎么知道什么 ID 获取电影和观众将其插入第三个 table?
我应该插入到 2 个 table 中,然后调用另一个函数将 ID 插入到第三个中吗?我如何获得所有数据?
这是我的代码 - 这样做有错吗?
[WebMethod]
public void InsertToDB(string viewerName, string movieName)
{
InsertToViewerTbl(viewerName);
InsertToMoviesTbl(movieName);
}
private void InsertToMoviesTbl(string movieName)
{
var db = new MoviesEntities1();
var movieNameTbl = new MovieNameTbl();
movieNameTbl.MovieName = movieName;
db.AddToMovieNameTbls(movieNameTbl);
db.SaveChanges();
}
private void InsertToViewerTbl(string viewerName)
{
var db = new MoviesEntities1();
var viewerNameTbl = new ViewerNamesTbl();
viewerNameTbl.ViewerName = viewerName;
db.AddToViewerNamesTbls(viewerNameTbl);
db.SaveChanges();
}
您应该尝试使用 Entity Framework 的内置 "navigation properties" 一步 完成此操作 。假设您的 Movie
class 有一个 Viewers
导航 属性,您应该这样做:
private void InsertToMovies(string movieName, string viewerName)
{
using (var db = new MoviesEntities1())
{
// create the new movie, set its name
var newMovie = new MovieNameTbl();
newMovie.MovieName = movieName;
// create the new viewer, set its name
var viewer = new ViewerNamesTbl();
viewer.ViewerName = viewerName;
// add the viewer to the new movie instance
newMovie.Viewers.Add(viewer);
// add movie to the database context and save it
db.AddToMovieNameTbls(movieNameTbl);
db.SaveChanges();
}
}
有了这个,Entity Framework 将完成所有繁重的工作 - 你不需要知道任何 ID
,你不需要做任何第二次插入,你不需要处理 "link" table - 所有这些都由 Entity Framework 为您处理。
您可以 return 对象,将它们添加到数据库后,例如:
[WebMethod] public void InsertToDB(string viewerName, string movieName)
{
var viewer = InsertToViewerTbl(viewerName);
var movie = InsertToMoviesTbl(movieName);
InsertToMovies_Viewer(viewer, movie);
}
private MovieNameTbl InsertToMoviesTbl(string movieName)
{
var db = new MoviesEntities1();
var movieNameTbl = new MovieNameTbl();
movieNameTbl.MovieName = movieName;
db.AddToMovieNameTbls(movieNameTbl);
db.SaveChanges();
return movieNameTbl ;
}
private ViewerNamesTbl InsertToViewerTbl(string viewerName)
{
var db = new MoviesEntities1();
var viewerNameTbl = new ViewerNamesTbl();
viewerNameTbl.ViewerName = viewerName;
db.AddToViewerNamesTbls(viewerNameTbl);
db.SaveChanges();
return viewerNameTbl;
}
private void InsertToMovies_Viewer(ViewerNamesTbl viewer, MovieNameTbl movie)
{
var db = new MoviesEntities1();
var movieViewer = new Movies_Viewer();// or however the table is called
movieViewer.Viewer = viewer; // or however the column is called
movieViewer.Movie= movie; // or however the column is called
db.AddToMovies_Viewer(movieViewer);
db.SaveChanges();
}
但是我建议你用一种方法来做,这样你就不会每次都创建连接,每次都保存更改:
[WebMethod] public void InsertToDB(string viewerName, string movieName)
{
var db = new MoviesEntities1();
var movie = new MovieNameTbl();
movieNameTbl.MovieName = movieName;
db.AddToMovieNameTbls(movieNameTbl);
var viewer = new ViewerNamesTbl();
viewerNameTbl.ViewerName = viewerName;
db.AddToViewerNamesTbls(viewerNameTbl);
var movieViewer = new Movies_Viewer();// or however the table is called
movieViewer.Viewer = viewer; // or however the column is called
movieViewer.Movie= movie; // or however the column is called
db.AddToMovies_Viewer(movieViewer);
db.SaveChanges();
}
我在 SQL 数据库中有 3 个 table:Movies
、Viewer
和 Movies_Viewer
(=显示哪个观众看过哪部电影) .
客户端将插入 Viewer
名称和 Movie
名称以及 Entity Framework,我想将其插入到我拥有的 3 table 中(使用 linq例如),但我怎么知道什么 ID 获取电影和观众将其插入第三个 table?
我应该插入到 2 个 table 中,然后调用另一个函数将 ID 插入到第三个中吗?我如何获得所有数据?
这是我的代码 - 这样做有错吗?
[WebMethod]
public void InsertToDB(string viewerName, string movieName)
{
InsertToViewerTbl(viewerName);
InsertToMoviesTbl(movieName);
}
private void InsertToMoviesTbl(string movieName)
{
var db = new MoviesEntities1();
var movieNameTbl = new MovieNameTbl();
movieNameTbl.MovieName = movieName;
db.AddToMovieNameTbls(movieNameTbl);
db.SaveChanges();
}
private void InsertToViewerTbl(string viewerName)
{
var db = new MoviesEntities1();
var viewerNameTbl = new ViewerNamesTbl();
viewerNameTbl.ViewerName = viewerName;
db.AddToViewerNamesTbls(viewerNameTbl);
db.SaveChanges();
}
您应该尝试使用 Entity Framework 的内置 "navigation properties" 一步 完成此操作 。假设您的 Movie
class 有一个 Viewers
导航 属性,您应该这样做:
private void InsertToMovies(string movieName, string viewerName)
{
using (var db = new MoviesEntities1())
{
// create the new movie, set its name
var newMovie = new MovieNameTbl();
newMovie.MovieName = movieName;
// create the new viewer, set its name
var viewer = new ViewerNamesTbl();
viewer.ViewerName = viewerName;
// add the viewer to the new movie instance
newMovie.Viewers.Add(viewer);
// add movie to the database context and save it
db.AddToMovieNameTbls(movieNameTbl);
db.SaveChanges();
}
}
有了这个,Entity Framework 将完成所有繁重的工作 - 你不需要知道任何 ID
,你不需要做任何第二次插入,你不需要处理 "link" table - 所有这些都由 Entity Framework 为您处理。
您可以 return 对象,将它们添加到数据库后,例如:
[WebMethod] public void InsertToDB(string viewerName, string movieName)
{
var viewer = InsertToViewerTbl(viewerName);
var movie = InsertToMoviesTbl(movieName);
InsertToMovies_Viewer(viewer, movie);
}
private MovieNameTbl InsertToMoviesTbl(string movieName)
{
var db = new MoviesEntities1();
var movieNameTbl = new MovieNameTbl();
movieNameTbl.MovieName = movieName;
db.AddToMovieNameTbls(movieNameTbl);
db.SaveChanges();
return movieNameTbl ;
}
private ViewerNamesTbl InsertToViewerTbl(string viewerName)
{
var db = new MoviesEntities1();
var viewerNameTbl = new ViewerNamesTbl();
viewerNameTbl.ViewerName = viewerName;
db.AddToViewerNamesTbls(viewerNameTbl);
db.SaveChanges();
return viewerNameTbl;
}
private void InsertToMovies_Viewer(ViewerNamesTbl viewer, MovieNameTbl movie)
{
var db = new MoviesEntities1();
var movieViewer = new Movies_Viewer();// or however the table is called
movieViewer.Viewer = viewer; // or however the column is called
movieViewer.Movie= movie; // or however the column is called
db.AddToMovies_Viewer(movieViewer);
db.SaveChanges();
}
但是我建议你用一种方法来做,这样你就不会每次都创建连接,每次都保存更改:
[WebMethod] public void InsertToDB(string viewerName, string movieName)
{
var db = new MoviesEntities1();
var movie = new MovieNameTbl();
movieNameTbl.MovieName = movieName;
db.AddToMovieNameTbls(movieNameTbl);
var viewer = new ViewerNamesTbl();
viewerNameTbl.ViewerName = viewerName;
db.AddToViewerNamesTbls(viewerNameTbl);
var movieViewer = new Movies_Viewer();// or however the table is called
movieViewer.Viewer = viewer; // or however the column is called
movieViewer.Movie= movie; // or however the column is called
db.AddToMovies_Viewer(movieViewer);
db.SaveChanges();
}