У меня есть деталь со связью 3 подмостков:
У меня есть мало названный 'Местожительство' упрощенной формы, будь в следующей форме:
public class Domicilio
{
public int Id { get; set; }
public string Direccion { get; set; }
public int? ClienteId { get; set; }
public Cliente Cliente { get; set; }
public int? ProveedorId { get; set; }
public Proveedor Proveedor { get; set; }
public int? EmpresaId { get; set; }
public Empresa Empresa { get; set; }
}
И три Немногие более названные 'Клиент', 'Поставщик' и 'Предприятие'
public class Cliente
{
public int Id { get; set; }
public string Nombre { get; set; }
public List<Domicilio> Domicilios { get; set; }
}
public class Proveedor
{
public int Id { get; set; }
public string Nombre { get; set; }
public List<Domicilio> Domicilios { get; set; }
}
public class Empresa
{
public int Id { get; set; }
public string Nombre { get; set; }
public Domicilio Domicilio { get; set; }
}
У поставщика и Клиента есть много Местожительства, даже там без проблем. Деталь - со связью одна в один или один в нуль, между Предприятием и Местожительством.
Я думаю, что чужеземный ключ должен идти в таблице местожительства указывая в Id предприятия посредством свойства EmpresaId. Но мне не удается заставить это функционировать и реестры просто сохраняют, не дружа в базе данных.
Я использую FluentApi для конфигурации упрощенной формы.
Это код:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Cliente>()
.ToTable("clientes")
.HasMany(c => c.Domicilios)
.WithOptional(d => d.Cliente)
.HasForeignKey(d => d.ClienteId);
modelBuilder.Entity<Proveedor>()
.ToTable("proveedores")
.HasMany(p => p.Domicilios)
.WithOptional(d => d.Proveedor)
.HasForeignKey(d => d.ProveedorId);
modelBuilder.Entity<Empresa>()
.ToTable("empresas")
.HasOptional(e => e.Domicilio)
.WithOptionalPrincipal(d => d.Empresa);
modelBuilder.Entity<Domicilio>()
.ToTable("domicilios");
}
Какова ошибка?
Возможно с EntityFramework, что таблица ведет себя с HasMany
для неких организаций и с HasOptional
или HasRequired
для других?
Как я определяю, что чужеземный ключ предприятия EmpresaId
в таблице Местожительство используя FluentApi?
Связи Entity framework, которые polimofirmo, возможно устанавливать как нормальное наследство класса: ИЗДАННЫЕ
public class Domicilio
{
public int Id { get; set; }
public string Direccion { get; set; }
public int? ClienteId { get; set; }
public Cliente Cliente { get; set; }
public int? ProveedorId { get; set; }
public Proveedor Proveedor { get; set; }
}
public class Empresa : Domicilio
{
public string Nombre { get; set; }
}
: Для связей наследства в EF это не necerario declar класс такая дочь как dbset в DbContext ни harГ - в отсутствие объявлять Ваши связи. Только irГ - в отца, что этот случай serГ - в Местожительство:
В Dbcontext она incluirГ - в asГ -
public dbset<Domicilio> Domicilio {set;get;}
, Если он имеет realaciГі с другой таблицей serГ - в asГ-:
один один по отношению ко многому В этом случае ты не имел бы по отношению к одному modelBuilder.Entity<Domicilio>()
.HasMany(e => e.Tabla1)
.WithRequired(e => e.ObjectDomicilio)//Esto es lo unico que cambia
.HasForeignKey(e => e.DomicilioId)
modelBuilder.Entity<Domicilio>()
.HasMany(e => e.Tabla1)
.WithOptional(e => e.ObjectDomicilio)
.HasForeignKey(e => e.DomicilioId);
прямой доступ к Предприятию с Dbcontext, но если ты можешь соглашаться на Ваши данные как asГ-: using(var context=new Dbcontext)
{
(Empresa)context.Domicilio.where(x=>x.ClienteId==1).tolist();
}
В этом случае ты retornarГ - во все местожительство, у которого есть связь с клиентом 1 и - типа Предприятие.
Какой я прокомментировал тебе, наихудшая идея работать с одной relaciГіn polimГіrfica ВїPor quГ© ты не должен использовать связи polimГіrficas?
Организации дела состоит в том, чтобы воплощать реальный мир, в одном diseГ±o дела, у каждой организации есть их собственные признаки.
Организации дела поставляют informaciГіn другие организации, которые тратят их.