2013-05-21 2 views
0

를 생성하지 나는 다음과 같은 객체 모델이 있습니다엔티티 프레임 워크 질의는

[Table("APA_QuestionProduct")] 
public class QuestionProduct 
{ 
    [Key, ForeignKey("Question"), Column(Order=0)] 
    public int QuestionID { get; set; } 
    [ForeignKey("QuestionID")] 
    public Question Question { get; set; } 

    [Key, ForeignKey("Product"), Column(Order=1)] 
    public int ProductID { get; set; } 
    [ForeignKey("ProductID")] 
    public Product Product { get; set; } 
} 

테이블 :

USE [qbm] 
GO 

/****** Object: Table [dbo].[APA_QuestionProduct] Script Date: 5/21/2013 6:52:46 PM ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE TABLE [dbo].[APA_QuestionProduct](
    [QuestionID] [int] NOT NULL, 
    [ProductID] [int] NOT NULL, 
CONSTRAINT [PK_APA_QuestionProduct] PRIMARY KEY CLUSTERED 
(
    [QuestionID] ASC, 
    [ProductID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

ALTER TABLE [dbo].[APA_QuestionProduct] WITH CHECK ADD CONSTRAINT [FK_APA_QuestionProduct_APA_Product] FOREIGN KEY([ProductID]) 
REFERENCES [dbo].[APA_Product] ([ProductID]) 
GO 

ALTER TABLE [dbo].[APA_QuestionProduct] CHECK CONSTRAINT [FK_APA_QuestionProduct_APA_Product] 
GO 

ALTER TABLE [dbo].[APA_QuestionProduct] WITH CHECK ADD CONSTRAINT [FK_APA_QuestionProduct_APA_Question] FOREIGN KEY([QuestionID]) 
REFERENCES [dbo].[APA_Question] ([QuestionID]) 
GO 

ALTER TABLE [dbo].[APA_QuestionProduct] CHECK CONSTRAINT [FK_APA_QuestionProduct_APA_Question] 
GO 

그래서 테이블 뒤에 (또한 기본 키입니다) 단지 2 외래 키가 있습니다. 내 질문 객체에는 제품 목록이 있습니다. 나는 제품 ID 외래 키를 업데이트하고 어떤 쿼리/업데이트는 DB에서 생성되지 않은 상황에 'SaveChanges를'을 호출 할 때 : 나는 쿼리를 확인하는 InteliTrace에보고

question.Products[1].ProductID = 4;     
db.Entry(question.Products[1]).State = EntityState.Modified; 
db.SaveChanges(); 

하지만 쿼리는 내 QuestionProduct 테이블 경우에도 이상이라고하지 않습니다 내 QuestionProduct 개체가 변경되었습니다. 테이블이 업데이트되지 않는 이유는 무엇입니까? 오류가 발생하지 않습니다.

답변

1

엔티티 QuestionProduct에는 키 속성 만 포함되며 다른 스칼라 속성은 없습니다. Entity Framework는 (기본) 키 속성을 변경할 수 없습니다.

당신은 이전 링크 기록을 삭제하고과 같이 예를 들어, 새로운 관계를 구축 할 수있는 새로운 하나를 만들어야합니다

QuestionProduct oldProduct = question.Products[1]; 
QuestionProduct newProduct = new QuestionProduct 
{ 
    QuestionID = question.QuestionID, 
    ProductID = 4 
}; 

db.QuestionProducts.Attach(oldProduct); 
db.QuestionProducts.Remove(oldProduct); 
db.QuestionProducts.Add(newProduct); 

db.SaveChanges(); 

하지만 당신은 정말 대다 관계로이 모델합니다. QuestionProduct 엔티티가 필요하지 않으며 중간 엔터티를 탐색 할 필요없이 Question에서 Product까지 또는 그 반대로 직접 참조 할 수 있습니다.

here 예를 들어 어떻게 작동하는지 보여줍니다.