2010-06-21 5 views
0

j'ai deux classes ActiveRecordmises à jour dans INUTILEMENT CastleActiveRecord

class Product : ActiveRecordBase<Product> 
{ 
    private IList<Usage> _usages = new List<Usage>(); 
    ... 
    [HasMany(
    ColumnKey="produkt_id", 
    Inverse=true, 
      Cascade=ManyRelationCascadeEnum.None)] 
    public IList<Usage> Usages 
    { 
     get { return _usages; } 
     set { _usages = value; } 
    } 
    ...   
} 

class Usage : ActiveRecordBase<Usage> 
{ 
    private Product _product; 
    [BelongsTo("product_id")] 
    public Product Product 
    { 
     get { return _product; } 
     set { _product = value; } 
    } 

    private Typ _typ; 
    [BelongsTo("typ_id")] 
    public Typ 
    { 
     get { return _typ; } 
     set { _typ = value; } 
    } 
} 

public class Typ : ActiveRecordBase<Typ> {} 

Cela représente pièces automobiles (produits) qui peuvent être utilisés (utilisation) dans certains types (type) de voitures.

J'ai des informations avec des produits dans datagridview sur le côté gauche et des utilisations dataagridview sur le côté droit. En cas OnSelectionChanged dans les produits que je fais:

productUsagesDataGridView.DataSource = _currentProduct.Usages; 

Et quand je l'ai changé d'autres choses dans le produit (non usages) et appelle:

_currentProduct.SaveAndFlush(); 

enregistrement actif faire des mises à jour sql sur la ligne d'utilisation de chaque produit et, quoi de plus wierd, sur chaque ligne typ:/Et je suis sûr à 100% que je n'ai pas changé aucune de ces lignes. Le problème est survenu parce que l'utilisateur qui se connecte à DB n'a pas les droits de mise à jour sur la table typ et il devrait rester ainsi.

Peut-être que certains d'entre vous savent comment puis-je empêcher cela?

[Solution]

Il était ma qui est survenue faute de toute façon. Type a colonnes created_at et modified_at dans la base de données et modèle ar

DateTime CreatedAt { get; set; } 
DateTime ModifiedAt { get; set; } 

donc quand dans la base de ces colonnes peuvent parfois être nulle, quand je les ai chargés dans l'application, ils ont été mis à DateTime.Min.

La solution est de changer les types de champs dans le modèle à nullable:

DateTime? CreatedAt { get; set; } 
DateTime? ModifiedAt { get; set; } 

Répondre

1

mises à jour Unwanted peuvent être causées parfois par des discordances de cartographie (voir this article pour une discussion et d'une solution d'un tel cas).

OTOH si Typ est vraiment vous voudrez peut-être en lecture seule pour définir Mutable=false dans l » [ActiveRecord]

+0

Typ De ce point de vue de l'utilisateur Type est en lecture seule, donc je vais avec ModelsCreatedEvent dans initialiseur et il mis Mutable = false. Apparemment, cela résout le problème des mises à jour indésirables :) Merci :) –