내 응용 프로그램에서 영화를 감독자에게 지정하려고합니다. 물론 중복 된 디렉터를 저장할 필요가 없으므로 중복 된 행을 추가하지 않아도됩니다.중복 값 추가 방지
1. Get Director Id
1a. If director exist return existing director Id
1b. If director not exist add new and return added director Id
2. Add new Movie with directorId assigned.
난 그냥 Entity Framework
을 배우고 내가 그런 식으로이 작업을 수행하지 못할 :
나는 옛날이 sql server
와 함께 재미와 그 속임수를 썼는지 기억한다. 내 데이터베이스를 컬렉션으로 보는 방식을 바꿔야합니다. 그래서 Movie
에 Director
을 추가하고 있습니다. 내가 제대로 설명했다 있는지 확실하지 않다, 그래서 나는 코드를 보여주기 위해 더 좋을 거라 생각 :
class Program {
static void Main(string[] args) {
Movie firstMovie = new Movie() { Name = "Titanic" };
Movie secondMovie = new Movie() { Name = "Pulp Fiction" };
Movie thirdMovie = new Movie() { Name = "Matrix" };
Director director = new Director() { Name = "Warner Bros" };
firstMovie.Director = director;
secondMovie.Director = director;
thirdMovie.Director = director;
Db.AddMovie(firstMovie);
Db.AddMovie(secondMovie);
Db.AddMovie(thirdMovie);
}
}
public class Movie {
public int Id { get; set; }
public string Name { get; set; }
public int DirectorId { get; set; }
[ForeignKey("DirectorId")]
public virtual Director Director { get; set; }
}
public class Director {
public int Id { get; set; }
public string Name { get; set; }
public virtual List<Movie> Movies { get; set; }
public Director() {
Movies = new List<Movie>();
}
}
public class Db {
public static int AddMovie(Movie movie) {
using (var context = new MovieContext()) {
context.Movies.Add(movie);
context.SaveChanges();
return movie.Id;
}
}
}
public class MovieContext : DbContext {
public DbSet<Movie> Movies { get; set; }
public DbSet<Director> Directories { get; set; }
}
그리고 그 일이 내 데이터베이스에 3 배 같은 Director
이 그 이후입니다. 나는 단지 1 명만 가질 것으로 예상 했었습니다. 그러나 어떻게 그것을 성취 할 수 있습니까? Directories
을 추가하지 않으려면 어떻게해야하나요? 이미 수동으로 추가하지 않기 때문에 같은 이름의 이미 directory
이 있는지 확인 할 수 없습니다. Entity Framework
은 새 번호 Directory
을 새로 추가합니다. 그래서, 어떻게해야합니까?
내가 처리 한 것은 directorId
을 추가하고 엔티티 프레임 워크가 적절한 개체를 할당하도록하는 것입니다.
static void Main(string[] args) {
Movie firstMovie = new Movie() { Name = "Titanic" };
Movie secondMovie = new Movie() { Name = "Pulp Fiction" };
Movie thirdMovie = new Movie() { Name = "Matrix" };
Director director = Db.GetDirector("Warner Bros");
firstMovie.DirectorId = director.Id;
secondMovie.DirectorId = director.Id;
thirdMovie.DirectorId = director.Id;
Db.AddMovie(firstMovie);
Db.AddMovie(secondMovie);
Db.AddMovie(thirdMovie);
}
그리고 그 (이 필요한 경우 및 추가) Director
를 반환합니다 나의 새로운 방법
public static Director GetDirector(string directorName) {
using (var context = new MovieContext()) {
if (context.Directories.Any(x => x.Name == directorName))
return context.Directories.FirstOrDefault(x => x.Name == directorName);
else {
Director newDirector = new Director() { Name = directorName };
context.Directories.Add(newDirector);
context.SaveChanges();
return newDirector;
}
}
}
그래서 그것을 할 수있는 최선의 방법이있다 : 이것은 내가 main
을 변경했습니다 어떻게? 새로운 Director
을 추가하는 것이 적절하게 코딩되었는지 확실하지 않습니다. 어떤 조언이 있으십니까?
감사합니다. 두 번째 전략은 나를 위해 가장 합리적인 것 같습니다. – Dawvawd