나는 테이블 레스토랑이 있습니다. 레스토랑에는 여러 가지 특선 요리가 있습니다. 그리고 특산품 예를 들어 chinees, spahnish, 그리스 등코드 첫 번째 관계 일대 다/많음 대 많음
레스토랑 테이블/클래스입니다
[Table("Restaurant")]
public class Restaurant
{
[Key]
[Column(Order = 0)]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
[MaxLength(40)]
[Column(Order = 2)]
public string Name { get; set; }
[MaxLength(1000)]
[Column(Order = 6)]
public string Comments { get; set; }
public virtual ICollection<Specialties> Specialties { get; set; }
}
그리고 이것은 내 전문 테이블/클래스 :
이public enum Specialty
{
Chinees = 0,
Spanish = 1,
Etc.. = 2,
}
[Table("Specialties")]
public class Specialties
{
[Key]
[Column(Order = 0)]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
[Column(Order = 1)]
public Specialty Specialty { get; set; }
//[Required]
[MaxLength(20)]
[Column(Order = 2)]
public string Name { get; set; }
public virtual ICollection<Restaurant> Restaurant { get; set; }
}
특산물 테이블이 사전입니다 - 데이터로 채워짐.
// Primary keys
modelBuilder.Entity<Restaurant>().HasKey(q => q.Id);
modelBuilder.Entity<Specialties>().HasKey(q => q.Id);
// Relationship
modelBuilder.Entity<Restaurant>()
.HasMany(q => q.Specialties)
.WithMany(q => q.Restaurant)
.Map(q =>
{
q.ToTable("RestaurantSpecialty");
q.MapLeftKey("RestaurantId");
q.MapRightKey("SpecialtyId");
});
그리고 내가있어 내 종자 함수 : Fluent Api
와
[Table("RestaurantSpecialties")]
public class RestaurantSpecialties
{
[Key]
public int RestaurantId { get; set; }
[Key]
public int SpecialtyId { get; set; }
[ForeignKey("RestaurantId")]
public virtual Restaurant Restaurant{ get; set; }
[ForeignKey("SpecialtyId")]
public virtual Specialties Specialty { get; set; }
}
나는이 같은 모델을 정의하려고 :
이
많은 관계로 많은 내 테이블/클래스 다음과 같은 데이터를 시드 :context.Specialties.AddOrUpdate(
p => p.Specialty,
new Specialties { Specialty = Specialty.Chinees, Name = "Chinees" },
new Specialties { Specialty = Specialty.Spanish, Name = "Spanish" },
);
ICollection<Specialties> lstSpecialties = new List<Specialties>();
lstSpecialties.Add(context.Specialties.FirstOrDefault(x => x.Name == "Chinees"));
context.Restaurants.AddOrUpdate(
p => p.Name,
new Restaurant{ Name = "Ctr test1", Specialties = lstSpecialties, Comments = "sfasd" },
new Restaurant{ Name = "Ctr test2", Specialties = lstSpecialties, Comments = "asd" },
);
내 테이블 RestaurantSpecialties 계속하지 않는다 아무것도 아니야. 나는 두 테이블 모두의 이드를보기를 기대했다.
내가 뭘 잘못하고 있니?
[EDIT] 거트가 (단지 이름 변경 부분이 아닌 실제 이름)을 제안 할 것처럼 ENUM은 'RestaurantSpecialty'를 '특수'에서 변경 한
.
'Specialties'라는 복수 클래스도 'Specialty'로 이름이 바뀌 었습니다. 또한 Gert가 제안했기 때문에.
조인 테이블도 모델에서 제거되었습니다. 내 원래 게시물의 Fluent Api
부분이 그에 따라 업데이트되었습니다.
음식점 이름이 내가 처음에 잊어 버린 식당으로 바뀌 었습니다. 그래서 혼란을 극복하기 위해 나는 원래 코드 게시판에서도이 작업을 수행했습니다.
context.Specialties.AddOrUpdate(
new Specialty { CateringSpecialty = RestaurantSpecialty.Chinese, Name = "Chinese" },
new Specialty { CateringSpecialty = CateringSpecialty.Greeks, Name = "Greeks" },
);
var aSpecialty = context.Specialties.FirstOrDefault(x => x.Name == "Chinese");
var restaurant1 = context.Restaurants.Include(c => c.Specialties).FirstOrDefault(x => x.Name == "Ctr test1");
if (restaurant1 == null)
{
restaurant1 = new Restaurant
{
Name = "Ctr test4",
Specialties = new List<Specialty> { aSpecialty },
Comments = "testtttttttt"
};
context.Restaurants.Add(restaurant1);
}
else
{
if (!restaurant1.Specialties.Any(s => s.Id == aSpecialty.Id))
restaurant1.Specialties.Add(aSpecialty);
restaurant1.Name = "Ctr test4";
restaurant1.Comments = "testtttt";
}
먼저 many to many 연관을 매핑하면'RestaurantSpecialties'가 클래스 모델의 일부가되어서는 안됩니다. –
안녕하세요, 어떤 매핑을 사용해야하는지 잘 모르겠습니다. 하나에서 많은 것에서 많은 것에서 두 번이나 하나 또는 여러 번. 너는 무엇을 제안 하겠는가? – Yustme
그건 너에게 달렸어. 그것은 순수한 접합점 테이블이므로 어느 방향 으로든 할 수 있습니다. 외래 키 연관 (연관 클래스 사용) 또는 독립 연관 사용 (사용하지 않음) 여부에 따라 다릅니다. 부가 메모 : 클래스 이름에 복수 단어를 사용하지 마십시오 ('Specialties'). 클래스와 열거 형의 이름을 모두 바꿉니다. –