Ошибка Entity Framework при создании внешних ключей - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь использовать миграции для генерации базы данных EF, но при выполнении команды update-database я получаю пару ошибок.

Ошибка 1

Failed executing DbCommand (7ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
CREATE TABLE [Occupier] (
    [OccupierId] int NOT NULL IDENTITY,
    [Title] int NOT NULL,
    [FirstName] nvarchar(32) NULL,
    [LastName] nvarchar(32) NULL,
    [Dob] datetime2 NOT NULL,
    [Relationship] nvarchar(32) NULL,
    CONSTRAINT [PK_Occupier] PRIMARY KEY ([OccupierId]),
    CONSTRAINT [FK_Occupier_Property_OccupierId] FOREIGN KEY ([OccupierId]) REFERENCES [Property] ([PropertyId]) ON DELETE CASCADE
);

Ошибка 2

Нельзя создать каскадный внешний ключ 'FK_Occupier_Property_OccupierId', если ссылающийся столбец 'Occupier.OccupierId' является столбцом идентификаторов.Не удалось создать ограничение или индекс.См. Предыдущие ошибки.

Из того, что я вижу, мои таблицы настроены правильно, но, очевидно, чего-то не хватает, чего я не вижу.Я выложу код для таблиц ниже, и, надеюсь, кто-нибудь увидит, что мне не хватает.

Для ясности;SolicitorInstruction имеет объект Property, который может содержать число Occupiers.

Я также не уверен в том, как работает [ForeignKey("string")].Это говорит "это внешний ключ к первичному ключу" строка "? Или" строка "является внешним ключом?

SolicitorInstruction

public class SolicitorInstruction
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int SolicitorInstructionId { get; set; }
        public InstructionTypes InstructionType { get; set; }
        public int ApplicationId { get; set; }
        public DateTime DateLogged { get; set; }
        [ForeignKey("AdditionalInformationId")]
        public AdditionalInformation AdditionalInformation { get; set; }
        [ForeignKey("BorrowerBankId")]
        public BorrowerBank BorrowerBank { get; set; }
        [ForeignKey("BrokerId")]
        public Broker Broker { get; set; }
        [ForeignKey("PropertyId")]
        public Property Property { get; set; }
        [ForeignKey("SolicitorId")]
        public Solicitor Solicitor { get; set; }
        [ForeignKey("BorrowerId")]
        public List<Borrower> Borrower { get; set; }
        [ForeignKey("CurrentLenderId")]
        public List<CurrentLender> CurrentLender { get; set; }
    }

Свойство

[Table("Property")]
public partial class Property
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int PropertyId { get; set; }

    [StringLength(8)]
    public string ReferenceNumber { get; set; }
    [StringLength(4)]
    public string CaseOwner { get; set; }
    public int AmountBorrowed { get; set; }
    [ForeignKey("SecurityAddressId")]
    public Address Security { get; set; }
    [ForeignKey("CorrespondenceAddressId")]
    public Address Correspondence { get; set; }
    [ForeignKey("OccupierId")]
    public List<Occupier> Occupier { get; set; }
    public TenureTypes Tenure { get; set; }
    public JurisdictionTypes Jurisdiction { get; set; }
    public FunderTypes Funder { get; set; }

    public Property()
    {
        Occupier = new List<Occupier>();
    }
}

Занимайте

[Table("Occupier")]
    public partial class Occupier
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int OccupierId { get; set; }
        public Honorifics Title { get; set; }
        [StringLength(32)]
        public string FirstName { get; set; }
        [StringLength(32)]
        public string LastName { get; set; }
        public DateTime Dob { get; set; }
        [StringLength(32)]
        public string Relationship { get; set; }

    }

1 Ответ

0 голосов
/ 22 октября 2018

Попробуйте внести изменения, чтобы добавить свойство навигации в зависимый класс.

Свойство

[Table("Property")]
public partial class Property
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int PropertyId { get; set; }

    [StringLength(8)]
    public string ReferenceNumber { get; set; }
    [StringLength(4)]
    public string CaseOwner { get; set; }
    public int AmountBorrowed { get; set; }
    [ForeignKey("SecurityAddressId")]
    public Address Security { get; set; }
    [ForeignKey("CorrespondenceAddressId")]
    public Address Correspondence { get; set; }
    public List<Occupier> Occupier { get; set; }
    public TenureTypes Tenure { get; set; }
    public JurisdictionTypes Jurisdiction { get; set; }
    public FunderTypes Funder { get; set; }

    public Property()
    {
        Occupier = new List<Occupier>();
    }
}

Занимать

[Table("Occupier")]
    public partial class Occupier
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int OccupierId { get; set; }
        public Honorifics Title { get; set; }
        [StringLength(32)]
        public string FirstName { get; set; }
        [StringLength(32)]
        public string LastName { get; set; }
        public DateTime Dob { get; set; }
        [StringLength(32)]
        public string Relationship { get; set; }
        [Required]
        public int PropertyId { get; set; }
        [ForeignKey(PropertyId)]
        public Property Property {get; set;}

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...