Дилемма свойств навигации Entity Framework 4 / MVC3 - PullRequest
0 голосов
/ 30 июля 2011

Я пытаюсь выяснить, как настроить свойства навигации для 2 моделей (сущностей), которые будут генерировать таблицы SQL.Сценарий: у меня есть груз и модель компании / субъекта.Мне нужно связать 3 свойства ClientID¸ ShipperID и ConsigneeID из модели отгрузки, чтобы указать CompanyID в модели компании.Теперь, каковы правильные свойства навигации для модели отгрузки и как будет выглядеть контекст?

    public virtual ICollection< Company > Companies { get; set; }
        OR
    public virtual Company Company { get; set; }

Вот две модели:

    public class Shipment
{
    public int ShipmentID { get; set; }
    public string Name { get; set; }
    public DateTime DateStamp { get; set; }
    public int ClientID { get; set; }
    public int ShipperID { get; set; }
    public int ConsigneeID { get; set; }

    public virtual ICollection< Company > Companies { get; set; }
        OR
    public virtual Company Company { get; set; }
}

public class Company
{
    public int CompanyID { get; set; }
    public string Name { get; set; }
    public DateTime DateStamp { get; set; }

    public virtual ICollection< Shipment > Shipments { get; set; }
}

Ответы [ 2 ]

2 голосов
/ 30 июля 2011

Вам нужно будет использовать некоторые атрибуты для достижения этой цели.Я предполагаю, что у вас есть отношения 1- * между поставками и компаниями.(Поставка * Клиентам / Грузоотправителям / Грузополучателям) Отгрузка:

public class Shipment
{
    public int ShipmentID { get; set; }
    public string Name { get; set; }
    public DateTime DateStamp { get; set; }
    [ForeignKey("Client")]
    public int ClientID { get; set; }
    [ForeignKey("Shipper")]
    public int ShipperID { get; set; }
    [ForeignKey("Consignee")]
    public int ConsigneeID { get; set; }

    public virtual Company Client { get; set; }
    public virtual Company Shipper { get; set; }
    public virtual Company Consignee { get; set; }
}

Компания:

public class Company
{
    public int CompanyID { get; set; }
    public string Name { get; set; }
    public DateTime DateStamp { get; set; }
    [InverseProperty("Shipper")]
    public virtual ICollection< Shipment > ShipmentsShipped { get; set; }
    [InverseProperty("Consignee")]
    public virtual ICollection<Shipment> ShipmentsConsigned { get; set; }
    [InverseProperty("Client")]
    public virtual ICollection<Shipment> ShipmentsOwned { get; set; }
}

Контекст:

public class TesteEntityMVCContext : DbContext
{     
    public DbSet<Shipment> Shipments { get; set; }
    public DbSet<Company> Companies { get; set; }
}
2 голосов
/ 30 июля 2011

если в вашем отправлении есть много компаний, которые вам нужно использовать (отношения между многими)

public virtual ICollection< Company > Companies { get; set; }

иначе, если в вашем отправлении есть только одна компания, которую вам нужно использовать (отношения один ко многим)

  public virtual Company Company { get; set; }

И при желании вы можете указать больше об отношениях в onModelBuilding событии в вашем dbContext.

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
  modelBuilder.Entity<Shipment>()
    .HasRequired(x => x.Company ) \\..... etc as your requirement
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...