将字段定义为受保护的属性

时间:2016-03-27 12:14:50

标签: c# entity-framework code-first protected tph

我为一个表设计了一个抽象类

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) 我发现当属性定义为PROTECTED时,它们不会在数据库中生成,它们应该是公共的(上面是受保护的其他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        
            }
        }
   }

1 个答案:

答案 0 :(得分:2)

一个简单的解决方案是使用访问表达式:

const

在制图中,您可以选择以下内容:

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;
        }
   }
}

进一步阅读:

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