2011-01-13 8 views
5

Mam encję EF4 (pierwszy kod), która zawiera int maską bitową. Stworzyłem maskę bitmaskową, aby ułatwić pracę z maskami bitowymi (zapewnia dostęp do bitów właściwościami bool). Struktura bitmask zawiera przeciążone niejawne operatory konwersji na i z int.Użyj struct zamiast prymitywu dla typu właściwości EF4.

Próbowałem ustawić typ właściwości do struktury bitmaskowej, ale wartość powraca jako 0. Wiem, że wartość w bazie danych ma wartość, a maska ​​bitowa działa w moich testach jednostkowych. Ustawiłem parametr HasColumnType na "INT".

Obiekt ...

[Required] 
[Display(Name = "Display Pages Bitmask")] 
[Column(Name = "fDisplayPagesBitmask")] 
public DisplayPagesBitmask DisplayPagesBitmask { get; set; } 

od obiektu kontekstowego ...

protected override void OnModelCreating(ModelBuilder builder) 
{ 
    builder.Entity<Website>() 
     .Property(m => m.DisplayPagesBitmask) 
     .HasColumnType("INT"); 
} 

Czy to możliwe? Jeśli tak, co muszę zrobić, aby działało?

Odpowiedz

3

Nie można bezpośrednio odwzorować struktury. Musisz odwzorować właściwość int (ustaw wewnętrzną lub chronioną) i podaj drugą niezmapowaną właściwość (użyj metody NotMappedAttribute lub Ignore) niestandardowego typu, który wewnętrznie ustawia zmapowaną właściwość całkowitą.

+4

Czy możesz podać przykładowy kod, w jaki sposób można to zrobić? – jonas

+0

Jakieś wieści na ten temat? Mam właściwość typu struct, która hermetyzuje zwykłą int. Coś zmieniło się od 2013 roku? – Shimmy

0

Użyłem obliczonej właściwości struct, aby uzyskać właściwości, które działają z SQLite w Entity Framework 6. Modyfikator dostępu chroniony dla właściwości ForSQLite nie działa dla mnie. Chociaż powinny być prywatne lub chronione w moich oczach.

public Boolean ZystostatikaForSQLite { 
     get; 
     set; 
    } 
    public Boolean ImmunsupressivaForSQLite { 
     get; 
     set; 
    } 
    public Boolean AntikoagolanzienForSQLite { 
     get; 
     set; 
    } 
    public Boolean GlucokortikoideForSQLite { 
     get; 
     set; 
    } 
    // 4 Kategorien der Arzneimittel: Zytostatika, Immunsupressiva, Antikoagolanzien, Glucokortikoide 
    public struct PharmaceuticalCategories { 
     public Boolean Zystostatika; 
     public Boolean Immunsupressiva; 
     public Boolean Antikoagolanzien; 
     public Boolean Glucokortikoide; 
    }; 
    public PharmaceuticalCategories medicineTaken { 
     get { 
      PharmaceuticalCategories pc = new PharmaceuticalCategories(); 
      pc.Zystostatika = this.ZystostatikaForSQLite; 
      pc.Immunsupressiva = this.ImmunsupressivaForSQLite; 
      pc.Antikoagolanzien = this.AntikoagolanzienForSQLite; 
      pc.Glucokortikoide = this.GlucokortikoideForSQLite; 

      return pc; 
     } 
     set { 
      this.ZystostatikaForSQLite = value.Zystostatika; 
      this.ImmunsupressivaForSQLite = value.Immunsupressiva; 
      this.AntikoagolanzienForSQLite = value.Antikoagolanzien; 
      this.GlucokortikoideForSQLite = value.Glucokortikoide; 
     } 
    }