我有两个ActiveRecord类
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> {}
这表示可以在某些类型(Typ)的汽车中使用(使用)的汽车零件(产品)。
我在左侧的datagridview中使用gui产品,在右侧使用datagridview。在产品的OnSelectionChanged事件中我做了:
productUsagesDataGridView.DataSource = _currentProduct.Usages;
当我改变产品中的其他东西(不是用法)并致电:
_currentProduct.SaveAndFlush();
活动记录在每个产品的使用行上执行sql更新,并且在每个类型行上更加奇怪:/并且我100%确定我没有更改任何这些行。问题出现了,因为连接到db的用户没有表typ的更新权限,它应该保持这种状态。
也许有些人知道如何防止这种情况?
[解决]
无论如何,这是我的错。 Typ在数据库和ar模型中有created_at和modified_at列
DateTime CreatedAt { get; set; }
DateTime ModifiedAt { get; set; }
因此,当在数据库中时,这些列有时可能为null,当我将它们加载到应用程序时,它们被设置为DateTime.Min。
解决方案是将模型中的字段类型更改为可为空:
DateTime? CreatedAt { get; set; }
DateTime? ModifiedAt { get; set; }
答案 0 :(得分:1)
有时可能会因映射不匹配而导致不需要的更新(有关此类案例的讨论和解决方案,请参阅this article)。
OTOH,如果Typ
真的只读,您可能想在Mutable=false
的{{1}} Typ
中设置[ActiveRecord]