Поскольку я пытаюсь разобраться с Entity Framework code-first и как устанавливать отношения между сущностями. Я столкнулся с проблемой, когда пытался вставить (заполнить) некоторые данные в свою базу данных. Я пытаюсь вставить объект продукта внутрь объекта покупок (заказа). Это свойство продукта в покупках является виртуальным, чтобы указать, что это свойство навигации. Есть ли другой способ достичь того, чего я хотел? добавлено, потому что для него настроена навигация «Клиент». Чтобы заполнить отношения, вам необходимо добавить начальное значение связанной сущности в «Клиент» и указать значения внешнего ключа {'customerID'}. Рассмотрите возможность использования DbContextOptionsBuilder.EnableSensitiveDataLogging для просмотра значений задействованных свойств.
Ниже приведен метод заполнения, который выполняется в классе контекста данных.
private void SeedDatabase(ModelBuilder builder)
{
// Construct Data
var productType = new ProductType()
{
typeName = "Operating System"
};
var product = new Product()
{
typeID = productType.typeID,
productName = "Windows",
productVersion = "10 Home",
productDescription = "This version of windows is the Home 10 edition",
keyPrice = 10,
license = "ASDEW-2342-SDE34-FGR35",
ProductType = productType
};
var customer = new Customer()
{
customerEmail = "test-customer@gmail.com",
customerFullname = "John Derek"
};
var transaction = new Transaction()
{
paid = true,
transactionAmount = 10
};
var order = new Buys()
{
customerID = customer.customerID,
TransactionID = transaction.transcationID,
quantity = 1,
Date = new DateTime().Date,
Transaction = transaction,
Customer = customer,
Product = product,
productID = product.productID
};
transaction.Buy = order;
System.Collections.Generic.List<Buys> orders = new System.Collections.Generic.List<Buys>() { order };
product.customerBuys = orders;
builder.Entity<ProductType>()
.HasData(productType);
builder.Entity<Product>()
.HasData(product);
builder.Entity<Customer>()
.HasData(customer);
builder.Entity<Transaction>()
.HasData(transaction);
builder.Entity<Buys>()
.HasData(orders);
}
И вот две модели это упоминание о.
public class Customer
{
public Customer()
{
customerID = Guid.NewGuid().ToString();
}
[Key]
public string customerID { get; set; }
public string customerFullname { get; set; }
public string customerEmail { get; set; }
public virtual ICollection<Buys> customerBuys { get; set; }
}
// This is a join table between product and customer.
// Product can have many customers
// One customer can purchase many products
public class Buys
{
public Buys()
{
buyID = Guid.NewGuid().ToString();
}
[Key]
public string buyID { get; set; }
public string productID { get; set; }
public virtual Product Product { get; set; }
public string customerID { get; set; }
public virtual Customer Customer { get; set; }
public int quantity { get; set; }
public DateTime Date { get; set; }
public string TransactionID { get; set; }
public virtual Transaction Transaction { get; set; }
}