Entity Framework: удаление обоих направлений навигации, когда леса - PullRequest
2 голосов
/ 04 октября 2019

Когда я защищаю базу данных с помощью Entity Framework Core, как предотвратить двунаправленные свойства? Я хочу разрешить только одностороннюю навигацию. Есть ли параметр командной строки командной строки?

В классе продукта я хочу удалить это свойство

public virtual ICollection<CustomerTransaction> CustomerTransaction { get; set; }

В основном только транзакция клиента должна иметь навигацию, поскольку она имеет фактический внешний ключ. Хотите удалить последнюю строку и аналогичным образом иметь более 1000 таких табличных объектов. Требуется параметр командной строки EF scaffold или автоматизация (возможно, с помощью Regex или другого инструмента).

База данных:

create table dbo.CustomerTransaction(
    CustomerTransactionId int NOT NULL,
    ProductId int NULL,
    Quantity int NULL,
    CustomerLastName varchar(255) NULL,
    constraint PK_CustomerTransactionId primary key clustered (CustomerTransactionId ASC))

alter table dbo.CustomerTransaction add constraint fk_CustomerTransaction_Product_ProductId FOREIGN KEY(ProductId) REFERENCES dbo.Product (ProductId)

Entity Framework:

public partial class CustomerTransaction
{
    public int CustomerTransactionId { get; set; }
    public int? ProductId { get; set; }
    public int? Quantity { get; set; }
    public string CustomerLastName { get; set; }

    //Keep this line since it has the foreign key
    public virtual Product Product { get; set; }
}


public partial class Product
{
    public Product()
    {
        CustomerTransaction = new HashSet<CustomerTransaction>();
    }

    public int ProductId { get; set; }
    public string ProductName { get; set; }
    public decimal? Amount { get; set; }

    // REMOVE THIS LINE
    public virtual ICollection<CustomerTransaction> CustomerTransaction { get; set; }
}

Результат:

Требуется только этот способ,

storeDbContext.CustomerTransaction.Include(c => c.Product).ToListAsync()

Не так,

storeDbContext.Product.Include(c => c.CustomerTransaction).ToListAsync()

Использование EF Core 2.2,

...