Entity Framework Fluent API - Vazební tabulka   otázka

C#, Entity Framework

Ahoj,

učím se pracovat s fluent API a narazil jsem na problém s vazebními tabulkami. Řekněme, že mám model Employee a model Company. Nyní bych rád vytvořil vazební tbaulku např: EmployeeInCompany, kde jeda Company může mít M Employee. Jak toto napsat navigačními propertami a nastavit za pomoci fluent API? Děkuji.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

do třídy Company

public virtual ICollection<Employee> Employees { get; set; }

a do třídy Employee

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

Více o tom

http://www.entityframeworktutorial.net/c...

odstavec Configure Many-to-Many relationship using Fluent API

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Ale on chce 1:N takze tam nemuzou byt samozrejme dve kolekce...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

No vidíš, to jsem přehlídl... Tak prostě jen další třídu s kolekcí a vazbou na tu tabulku...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Takže konkrétně to bude:

internal class Employee
{
    #region Configuration class
    internal sealed class EmployeeConfiguration : EntityTypeConfiguration<Employee>
    {
        #region constructors and destructors
        public EmployeeConfiguration()
        {
            //Primary Key
            this.HasKey(t => t.EmployeeID);

            //Relationships
            //this.HasOptional(o => o.EmployeeInCompany).WithRequired(o => o.Employee);   //1:1
        }
        #endregion
    }
    #endregion

    #region member varible and default property initialization
    [Key]
    public int EmployeeID { get; set; }

    public EmployeeInCompany EmployeeInCompany { get; set; }
    #endregion
}

internal class Company
{
    #region Configuration class
    internal sealed class CompanyConfiguration : EntityTypeConfiguration<Company>
    {
        #region constructors and destructors
        public CompanyConfiguration()
        {
            //Primary Key
            this.HasKey(t => t.CompanyID);

            //Relationships
            //this.HasMany(o => o.EmployeesInCompany).WithRequired(o => o.Company).HasForeignKey(f => f.CompanyID);   //1:N
        }
        #endregion
    }
    #endregion

    #region member varible and default property initialization
    [Key]
    public int CompanyID { get; set; }

    public ICollection<EmployeeInCompany> EmployeesInCompany { get; set; }
    #endregion
}

internal class EmployeeInCompany
{
    #region Configuration class
    internal sealed class EmployeeInCompanyConfiguration : EntityTypeConfiguration<EmployeeInCompany>
    {
        #region constructors and destructors
        public EmployeeInCompanyConfiguration()
        {
            //Primary Key
            this.HasKey(t => t.EmployeeID);

            //Relationships
            this.HasRequired(o => o.Company).WithMany(o => o.EmployeesInCompany).HasForeignKey(f => f.CompanyID);   //1:N
            this.HasRequired(o => o.Employee).WithOptional(p => p.EmployeeInCompany);                               //1:1
        }
        #endregion
    }
    #endregion

    #region member varible and default property initialization
    [Key]
    public int EmployeeID { get; set; }
    public int CompanyID { get; set; }

    public Company Company { get; set; }
    public Employee Employee { get; set; }
    #endregion
}

Tabulka EmployeeInCompany je 1:1 k tabulce Employee a 1:N k tab. Company.

Ty vazby stačí samozřejmě popsat jen z jedné strany a je jedno z které, ale pro úplnost jsem je tam zaremovaně dal, aby bylo vidět, jak by to bylo.

Druhou variantou je nechat pouze dvě tabulky Employee a Company a do tabulky Employee přidat CompanyID buď typu int nebo int? podle toho, zda chcete umožnit zaměstnance, který není rovnou přiřazen do firmy (v první variantě je to na úrovni db nevynucené vždycky).

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback