как Entity Framework отслеживает идентификатор ссылки - PullRequest
0 голосов
/ 24 апреля 2018

Я немного запутался, как Entity Framework отслеживает ссылочный Id любого объекта.

На самом деле, я мигрирую данные из одной базы данных в другую.Итак, у меня есть две сущности, имеющие отношение основной детали: 1. QuestionMaster 2. ListName

QuestionMasterId - это FK в ListName.

Теперь нет необходимости для каждого вопроса в списке, поэтомуЯ должен продолжать добавлять вопросы в QuestionMaster, пока не найду вопрос, с которым список связан только тогда, когда мне нужно будет создать ListName, но соответствующий ListMasterId должен быть назначен ListName.

Ниже подробно поясняется, Это был сложный код, я удалил часть кода, чтобы его было легче понять, не беспокойтесь о свойствах:

foreach (var Question in _tshQuestionMaster_local)
{
    // adding new question
    DataAccess.Hotel.DataModel.QuestionMaster _questionMaster_new = new DataAccess.Hotel.DataModel.QuestionMaster()
    {
        QuestionType = Question.TypeCode,
        QuestionText = Question.QuestionText,
        OrderNb = Question.OrderNo,
        Isactive = "Y"
    };
    _hotelEntities.QuestionMasters.Add(_questionMaster_new);

    if (IsQuestionHasList() && IsNewList())
    {
        //adding new list name
        ListName _listName_new = new ListName
        {
            IsActive = "Y",
            QuestionMaster = _questionMaster_new
        };
        _hotelEntities.ListNames.Add(_listName_new);
    }
}
_hotelEntities.SaveChanges();

Теперь, скажем, есть 10 вопросов, в списке которых связан только вопрос№ 3 и 8. У меня должен быть QuestionMasterId в ListName как 3 и 8, но он показывает мне 1 и 2, что заставляет меня думать, что EF не сохраняет ссылки.Это правда?если да, то что может быть альтернативой для получения соответствующих идентификаторов?

Мои классы моделей:

public partial class ListName
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public ListName()
        {
            this.ListItems = new HashSet<ListItem>();
            this.QuestionLists = new HashSet<QuestionList>();
        }

        public int Id { get; set; }
        public int QuestionId { get; set; }
        public string Code { get; set; }
        public string ListNameText { get; set; }
        public string IsActive { get; set; }

        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<ListItem> ListItems { get; set; }
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<QuestionList> QuestionLists { get; set; }
    }

public partial class QuestionMaster
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public QuestionMaster()
        {
            this.QuestionLists = new HashSet<QuestionList>();
        }

        public int Id { get; set; }
        public Nullable<int> QuestionId { get; set; }
        public string QuestionCode { get; set; }
        public string QuestionType { get; set; }
        public string QuestionText { get; set; }
        public Nullable<int> OrderNb { get; set; }
        public string Isactive { get; set; }

        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<QuestionList> QuestionLists { get; set; }
    }
...