2012-01-13 3 views
1

У меня есть класс QuestionEF-код первого внешнего ключа

CompareItems магазин CurrentQuestion к OtherQuestion сравнивать информацию.

public class Question 
{ 
    public virtual ICollection<QuestionMark> CompareItems { get; set; } 
} 


public class QuestionMark 
{ 
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 
    public int Question { get; set; } //Store ID of OtherQuestion 
    public decimal Mark { get; set; } 
} 

Когда я удаляю некоторые вопрос А мне нужно, чтобы все Questionmark где QuestionMark.Question == A.Id также будут удалены, так как нет необходимости иметь сравнивать информацию, если вопрос не существует. Как это можно сделать, не делая QuestionMark.Question сущностью? Возможно, у EF есть правило в Fluent-API, чтобы установить, что QuestionMark.Question является внешним ключом на объекте Question?

Я не хочу делать QuestionMark.Question как сущность, потому что он должен будет изменить текущую серию решений - это первый. Кроме того, вопрос является довольно тяжелым лицом, и загрузить его несколько раз, чтобы присвоить значение или удалить, или еще что-то будет нажать на производительности

ответ

1

Я думаю, что можно изменить приложение, чтобы использовать объекты вместо id, потому что EF по умолчанию использует ленивую загрузку, и это не вызовет проблем с производительностью. И я думаю, что использование только id вместо сущности возможно с некоторыми текущими настройками или атрибутом API.

0

Если вы не хотите, чтобы навигационное свойство Question в QuestionMark классе, то вам нужно вручную создать внешний ключ с «каскадным удалением». Затем, когда каждый вопрос удаляется, база данных удаляет связанные QuestionMark записей.

Однако этот подход имеет проблемы с EF. Поскольку EF не знает, что между этими объектами существует связь «каскадное удаление». Таким образом, могут быть несоответствия в локально отслеживаемых объектах в EF.

У вас нет причин, по которым вы не хотите сопоставлять отношения в EF, но я настоятельно советю вам против этого.

+1

Чтобы добавить, если причина «потому что я хочу получить номер Вопроса из объекта QuestionMark», вы можете открыть как свойство внешнего ключа, так и свойство навигации. – hvd