Domanda

Sto cercando di estendere la mia entità Linq-to-Sql con alcune proprietà extra. Questi sono "calcolati" proprietà basate sui dati della vista SQL sottostante. Ad esempio, pensa di avere un campo Data di nascita, che viene utilizzato per calcolare un campo Età estesa.

Ho provato ad estendere la mia classe di entità estendendo il metodo OnLoaded ().

Ricevo un errore in fase di compilazione tuttavia affermando che non posso crearlo. Ho controllato il codice designer per la mia classe di entità LTS e non ha una definizione parziale per nessuno dei punti di estensione previsti.

Ho controllato alcune delle mie altre classi di entità LTS e hanno questi punti di estensione. L'unica differenza che vedo è che quello senza viene caricato da una vista SQL, piuttosto che da una tabella. C'è un modo per agganciarsi a un " Loaded " evento durante il caricamento da una vista SQL?

TIA!

È stato utile?

Soluzione

Ho scoperto che non avevo un PrimaryKey specificato per la mia classe di entità Linq-to-Sql. Credo che senza una chiave primaria specificata, nessun metodo di estensione generato nella classe entità. Dopo aver specificato una chiave primaria sulla definizione della mia classe di entità LTS (tramite il designer), sono stato in grado di estendere l'evento OnLoaded ().

Altri suggerimenti

Puoi farlo per mezzo di una proprietà. Basta creare una classe parziale con lo stesso nome della tua entità. Qualsiasi proprietà o metodo aggiunto farà automaticamente parte dell'entità e consentirà di utilizzare uno qualsiasi dei suoi membri.

Ecco un esempio del modello:

public partial class [The Name of the Entity]
{
   public int Age
   {
      get
      {
         return CalculateAge(this.DateOfBirth);
      }
   }
}

Ecco alcune logiche su come calcolare l'età (Fonte: Geekpedia )

public static int CalculateAge(DateTime BirthDate)
{
    int YearsPassed = DateTime.Now.Year - BirthDate.Year;
    // Are we before the birth date this year? If so subtract one year from the mix
    if (DateTime.Now.Month < BirthDate.Month || 
          (DateTime.Now.Month == BirthDate.Month && DateTime.Now.Day < BirthDate.Day))
    {
        YearsPassed--;
    }
    return YearsPassed;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top