2010-02-15 2 views
2

J'ai un objet CSLA qui retourne des données de la base de données mais lorsque je modifie l'une des propriétés de l'objet, l'objet dit toujours IsDirty = "false". Bien que lorsque je crée un nouvel objet, IsDirty = "true". Je suis sûr que c'est juste quelque chose de simple qui me manque dans mon code. Ce qui suit est mon objet:CSLA Ne pas signaler l'objet comme étant sale après avoir été modifié

[Serializable()] 
[ObjectFactory(FactoryNames.SiteFactoryName)] 
public class Site : BusinessBase<Site> 
{ 
    #region Business Methods 

    public static PropertyInfo<int> IdProperty = RegisterProperty<int>(p => p.Id); 
    public int Id 
    { 
     get { return GetProperty(IdProperty); } 
     set { LoadProperty(IdProperty, value); } 
    } 

    public static PropertyInfo<string> NameProperty = RegisterProperty<string>(p => p.Name); 
    public string Name 
    { 
     get { return GetProperty(NameProperty); } 
     set { LoadProperty(NameProperty, value); } 
    } 

    public static PropertyInfo<string> CodeProperty = RegisterProperty<string>(p => p.Code); 
    public string Code 
    { 
     get { return GetProperty(CodeProperty); } 
     set { LoadProperty(CodeProperty, value); } 
    } 

    public static PropertyInfo<string> AliasProperty = RegisterProperty<string>(p => p.Alias); 
    public string Alias 
    { 
     get { return GetProperty(AliasProperty); } 
     set { LoadProperty(AliasProperty, value); } 
    } 

    public static PropertyInfo<string> AddressProperty = RegisterProperty<string>(p => p.Address); 
    public string Address 
    { 
     get { return GetProperty(AddressProperty); } 
     set { LoadProperty(AddressProperty, value); } 
    } 

    public static PropertyInfo<string> PostCodeProperty = RegisterProperty<string>(p => p.PostCode); 
    public string PostCode 
    { 
     get { return GetProperty(PostCodeProperty); } 
     set { LoadProperty(PostCodeProperty, value); } 
    } 

    public static PropertyInfo<string> InfoProperty = RegisterProperty<string>(p => p.Info); 
    public string Info 
    { 
     get { return GetProperty(InfoProperty); } 
     set { LoadProperty(InfoProperty, value); } 
    } 

    private static PropertyInfo<int> CustomerLinkProperty = RegisterProperty<int>(c => c.CustomerLink); 
    public int CustomerLink 
    { 
     get { return GetProperty(CustomerLinkProperty); } 
     set { SetProperty(CustomerLinkProperty, value); } 
    } 

    private static PropertyInfo<Accounts> AccountsProperty = RegisterProperty<Accounts>(c => c.Accounts); 
    public Accounts Accounts 
    { 
     get { return GetProperty(AccountsProperty); } 
     set { SetProperty(AccountsProperty, value); } 
    } 

    #endregion 

    #region Business Rules 

    protected override void AddBusinessRules() 
    { 
    } 

    #endregion 

    #region Authorization Rules 

    protected override void AddAuthorizationRules() 
    { 
     // add AuthorizationRules here 
     //AuthorizationRules.AllowWrite(NameProperty, "ProjectManager"); 
     //AuthorizationRules.AllowWrite(StartedProperty, "ProjectManager"); 
     //AuthorizationRules.AllowWrite(EndedProperty, "ProjectManager"); 
     //AuthorizationRules.AllowWrite(DescriptionProperty, "ProjectManager"); 
    } 

    protected static void AddObjectAuthorizationRules() 
    { 
    } 

    public override bool CanWriteProperty(string propertyName) 
    { 
     return true; 
    } 

    #endregion 

    #region Facotry Methods 

    public static Site NewSite() 
    { 
     return DataPortal.Create<Site>(); 
    } 

    public static Site GetSite(int id) 
    { 
     return DataPortal.Fetch<Site>(new SingleCriteria<Site, int>(id)); 
    } 

    public static Site GetSite(SiteCriteria siteCriteria) 
    { 
     return DataPortal.Fetch<Site>(siteCriteria); 
    } 

    public static void DeleteSite(int id) 
    { 
     DataPortal.Delete(new SingleCriteria<Site, int>(id)); 
    } 

    private Site() 
    { /* require use of factory methods */ } 

    #endregion 

    public class SiteCriteria 
    { 
     public int Id { get; private set; } 

     public SiteCriteria(int id) 
     { 
      Id = id; 
     } 
    } 
} 

Toute aide serait grandement appréciée.

Merci

+0

Êtes-vous en train de changer la valeur à autre chose que ce qu'il est chargé? –

Répondre

6

Le poseur de propriété doit utiliser SetProperty au lieu de LoadProperty

ex:

public static PropertyInfo<string> NameProperty = RegisterProperty<string>(p => p.Name); 
public string Name 
{ 
    get { return GetProperty(NameProperty); } 
    set { SetProperty(NameProperty, value); } <--- use SetProperty instead of LoadProperty 
} 
+0

Merci. C'est ce que j'ai pour copier et coller! – lancscoder

Questions connexes