2016-03-27 3 views
1

Я разработал абстрактный класс для одной таблицыОпределить поле охраняемой собственности

namespace Test.Data 
{ 
    [Table("Parameter")] 
    public abstract class Parameter 
    { 
     [StringLength(200)] 
     protected string title { get; set; } 

     protected decimal? num { get; set; } 

     public Int16 sts { get; set; } 

    } 
} 

и некоторые классы протяженных из него (TPH) я обнаружил, что, когда свойства, определенные как ЗАЩИЩЕНО, они не будут генерировать в базы данных, и они должны быть общедоступными (выше защищены другими sts). Но я хотел бы, чтобы скрыть вышеуказанные свойства из другого пространства имен и используя различные имена для них, как:

namespace Test.Data 
    { 
     public class Measure:Parameter 
     { 
      [NotMapped] 
      public string Title { get { return ttl; } set { ttl = value; } } 
     } 
    } 

    namsespace Test.Model 
    { 
     public class MeasureModel:Data.Measure 
     { 
      public void AddNew() 
      { 
       var m = new Data.Measure(); 
       m.Title="meter"; //other measure's properties shouldn't accessable here   
      } 
     } 
    } 
+0

Внутренние могут помочь вам – ahmedsafan86

+0

Возможный дубликат [Как сопоставить защищенное свойство в коде EF 4.3 сперва] (http://stackoverflow.com/questions/9311954/how-to-map-a-protected-property- in-ef-4-3-code-first) – poke

+0

@poke, EF оптимизирует каждый год и сейчас дни, когда мы говорим о его 6.x – Hamid

ответ

2

простого решением было бы использовать выражение доступа вместо:

namespace Test.Data 
{ 
    [Table("Parameter")] 
    public partial abstract class Parameter 
    { 
     [StringLength(200)] 
     protected string title { get; set; } 

     protected decimal? num { get; set; } 

     public Int16 sts { get; set; } 

    } 
} 

namespace Test.Data 
{ 
    public partial abstract class Parameter 
    { 
     public class PropertyAccessExpressions 
     { 
      public static readonly Expression<Func<Parameter, string>> Title = x => x.title; 
     } 
    } 
} 

Определяя вы идете что-то вроде этого:

.Property(Test.DataParameter.PropertyAccessExpressions.ID); 

Дальнейшее чтение:

http://blog.cincura.net/232731-mapping-private-protected-properties-in-entity-framework-4-x-code-first/