Как Entity framewrok определит первичный ключ в подходе базы данных первым

1

У меня есть следующие три класса моделей внутри моего SQL Server 2008, и я сопоставил таблицы с использованием структуры сущностей ado.net:

Первичный ключ для таблицы ITSwitchPort внутри базы данных - это технологияIDID и SwitchID:

public partial class ITSwitchPort

    {

        public int TechnologyID { get; set; }

        public int SwitchID { get; set; }

        public string PortNumber { get; set; }



        public virtual Technology Technology { get; set; }

        public virtual ITSwitch ITSwitch { get; set; }

    }

Первичным ключом для таблицы технологий в базе данных является технологияIDID:

public partial class Technology

    {

        public Technology()

        {

            this.ITServers = new HashSet<ITServer>();

            this.ITSwitchPorts = new HashSet<ITSwitchPort>();

            this.TechnologyAudits = new HashSet<TechnologyAudit>();

            this.TechnologyIPs = new HashSet<TechnologyIP>();

        }



        public int TechnologyID { get; set; }

        public string Tag { get; set; }

        public bool IsDeleted { get; set; }

        public byte[] timestamp { get; set; }

        public Nullable<int> TypeID { get; set; }

        public Nullable<System.DateTime> StartDate { get; set; }

        public Nullable<long> IT360ID { get; set; }

        public bool IsCompleted { get; set; }

        public Nullable<long> PartialTag { get; set; }

        public bool IsManaged { get; set; }



        public virtual ICollection<ITSwitchPort> ITSwitchPorts { get; set; }

    }

Первичным ключом для таблицы ITSwitch в базе данных является SwitchID:

public partial class ITSwitch

    {

        public ITSwitch()

        {

            this.ITSwitchPorts = new HashSet<ITSwitchPort>();

        }



        public int SwitchID { get; set; }

        public Nullable<int> ModelID { get; set; }

        public string Spec { get; set; }

        public int RackID { get; set; }

        public Nullable<int> ConsoleServerID { get; set; }

        public string Description { get; set; }

        public long IT360SiteID { get; set; }

        public byte[] timestamp { get; set; }

        public string ConsoleServerPort { get; set; }



        public virtual SwitchModel SwitchModel { get; set; }

        public virtual Technology Technology { get; set; }



        public virtual ITRack ITRack { get; set; }

        public virtual ICollection<ITSwitchPort> ITSwitchPorts { get; set; }

    }

Теперь, если я попытаюсь обновить ITSwitchPort.SwitchID, я получу сообщение об ошибке, что SwitchID является частью ключа и не может быть обновлен, поэтому мой вопрос заключается в том, как структура сущности определяет, какой ключ для этих трех моделей?

Теги:
entity-framework
ado.net

1 ответ

1
Лучший ответ

Все, хотя ваша проблема решена, ваш вопрос остался без ответа.

Вопрос в том, как Entity-Framework знает, что свойство является таблицей Первичный ключ - DbFirst.

Ответ заключается в том, что, как только вы сначала используете базу данных, Entity-Framework автоматически добавляет сопоставление между вашими сущностями и вашими таблицами, а одно из них выглядит следующим образом:

this.HasKey(a => a.TechnologyID );

в классе отображения технологий. (который был сгенерирован автоматически)

С помощью этого кода Entity-Framwork знает, какое свойство является основным ключом.

  • 0
    То есть вы имеете в виду, что он считывает первичный ключ из базы данных независимо от имени таблицы и имени первичного ключа?
  • 0
    и в моем случае я не могу найти любой tis.HasKey? Вы можете посоветовать?
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню