У меня есть следующие классы:
public class ProductAttribute
{
public Guid ProductId { get; set; }
public Guid AttributeId { get; set; }
public List<ProductAttributeValue> Values { get; set; }
public object[] GetKeys()
{
return new object[] {ProductId, AttributeId};
}
}
public class Product
{
public Guid Id { get; set; }
public string Name { get; set; }
}
public class Attribute
{
public Guid Id { get; set; }
public string Name { get; set; }
}
public class ProductAttributeValue
{
public Guid Id { get; set; }
public string Name { get; set; }
}
В исходном случае Product и Attribute являются AggregateRoot, поэтому я хочу пропустить навигацию по ссылкам на свойства.Значение - это простая сущность, но мне нужно это как ссылка на список в моем классе ProductAttribute, как вы видите, у этого класса есть составной ключ.Но я хочу, чтобы между ProductAttribute и ProductAttributeValue были установлены обязательные отношения с каскадным удалением.
Этот проект является внешним модулем, поэтому мои текущие конфигурации API являются расширением, которое вызывается в целевом приложении DbContext OnModelCreating.Я должен настроить все свойства и ссылки, которые еще не работали.
builder.Entity<ProductAttribute>(b =>
{
b.ToTable("ProductAttributes");
b.HasKey(x => new {x.ProductId, x.AttributeId});
//I should config ProductAttributeValue one-to-many manually here
}
builder.Entity<Product>(b =>
{
b.ToTable("Products");
b.HasKey(x => x.Id);
}
builder.Entity<Attribute>(b =>
{
b.ToTable("Attributes");
b.HasKey(x => x.Id);
}
builder.Entity<ProductAttributeValue>(b =>
{
b.ToTable("ProductAttributeValues");
b.HasKey(x => x.Id);
//I should config ProductAttribute many-to-one manually here
}
Как вы можете настроить свой Fluent API для сущности ProductAttribute для прохождения этого сценария?