代码之家  ›  专栏  ›  技术社区  ›  Jean-Francois

实体框架4,自定义属性。加上一些训练

  •  2
  • Jean-Francois  · 技术社区  · 14 年前

    我在这个类中有一个属性AddressID。

    我想能够添加一些处理这个道具在设置过程中。 前任:

      public partial class Address
      {
           public bool _AddressID;
           public bool AddressID{get return AddressID;}
           set{
                if(value == -1) _AddressID = null;
           }
       }
    

    2 回复  |  直到 14 年前
        1
  •  2
  •   Morteza Manavi    14 年前

    当然,您不能为了将自定义逻辑放入其setter而重新定义AddressID,因为您将得到编译器错误:
    类型地址已包含“AddressID”的定义

    不动产变更 OnProperty已更改 方法。例如, OnAddress已更改

    当属性即将更改(PropertyChange)时,以及在属性更改之后 值已更改(PropertyChanged)。

    // From the designer code for Address class:
    partial void OnAddressIDChanging(global::System.Int32 value);
    partial void OnAddressIDChanged();
    


    这就是您的实体模型设计器代码的外观(形上):

    public global::System.Int32 AddressID {
        get {
            return _AddressID;
        }
        set {
            if (_AddressID != value) {
                // OnPropertyChanging method get called here:
                OnAddressIDChanging(value);
    
                ReportPropertyChanging("AddressID");
                _AddressID = StructuralObject.SetValidValue(value);
                ReportPropertyChanged("AddressID");
    
                // OnPropertyChanged get called here:
                OnAddressIDChanged();
            }
        }
    }
    


    因此,要连接自定义代码,您只需执行以下操作:

    public partial class Address {
        partial void OnAddressIDChanged() {
            if(AddressID == -1) {            
                AddressID = 0;
            }
        }       
    }
    




        2
  •  0
  •   Steve Michelotti    14 年前

    EF4中的“代码优先”是一个选项—它允许您完全控制所有代码。但是,另一个选项是自定义EF4附带的EF4 T4模板。如果您的代码中有一些您一贯使用的模式,这将是一个很好的方法。您可以在此处阅读有关如何自定义模板的更多信息: Customizing Entity Classes in VS2010