Атрибут EF Core ForeignKey не создает ограничений при миграции - PullRequest
0 голосов
/ 29 мая 2020

В настоящее время я работаю над проектом. NET core 3.1.2, в котором у меня есть различные классы с отношениями внешнего ключа. База данных разработана с использованием принципа Code First.

Для определения ограничений внешнего ключа я хочу использовать атрибут ForeignKey из System.ComponentModel.DataAnnotations.Schema.

Вот пример 3 классов Я использую:

    public class Facility
    {
        public Facility()
        {
            this.Id = Guid.NewGuid();
        }

        public Guid Id { get; set; }
        public string Location { get; set; }
        public FacilityType FacilityType { get; set; }
    }
    public class Product
    {
        public Product()
        {
            this.Id = Guid.NewGuid();
        }

        public Guid Id { get; set; }
        public string ProductDescription { get; set; }
        public double UnitPrice { get; set; }
        public double? UnitWeight { get; set; }
        public char VarianceClass { get; set; }
        public char MarginClass { get; set; }

    }
    public class Sale
    {
        public Sale()
        {
            this.Id = Guid.NewGuid();
        }

        public Guid Id { get; set; }
        public DateTime Date { get; set; }

        [ForeignKey(nameof(Product))]
        public Guid ProductID { get; set; }

        [ForeignKey(nameof(Facility))]
        public int Quantity { get; set; }

    }

Как видите, у третьего класса Sale есть два ограничения ForeignKey. После этого я создаю миграции и применяю их, что работает без ошибок:

dotnet ef migrations add InitialCreate
dotnet ef database update

Build started...
Build succeeded.
Done.

Однако в результирующих файлах миграции вообще не создаются ограничения внешнего ключа. Почему-то мои атрибуты ForeignKey игнорируются. В чем может быть причина этого, нужно ли мне настроить что-то еще, чтобы включить ограничения внешнего ключа при создании миграции?

1 Ответ

0 голосов
/ 02 июня 2020

[ForeignKey ("Продукт")] enter code here publi c Guid Id {get; устанавливать; } publi c виртуальный продукт Product {get; устанавливать; }

...