У меня есть два класса 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> {}
Представляет автомобильные детали (продукты), которые могут использоваться (использоваться) в некоторых типах (типовых) автомобилей.
У меня есть графический интерфейс с продуктами в datagridview на левой стороне и использует datagridview на правой стороне. В событии OnSelectionChanged в продуктах я делаю:
productUsagesDataGridView.DataSource = _currentProduct.Usages;
И когда я изменил некоторые другие вещи в продукте (не употребления) и позвонил:
_currentProduct.SaveAndFlush();
активная запись выполняет обновления sql для каждой строки использования продукта и, что еще более странно, для каждой строки типа: / И я на 100% уверен, что не изменил ни одну из этих строк. Проблема возникла из-за того, что у пользователя, который подключается к базе данных, нет прав на обновление типа таблицы, и он должен оставаться таким.
Может быть, некоторые из вас знают, как я могу предотвратить это?
[Решение]
Случилось так, что это была моя вина. Тип имеет столбцы созданного и измененного в базе данных и в модели ar
DateTime CreatedAt { get; set; }
DateTime ModifiedAt { get; set; }
поэтому, когда в базе данных эти столбцы иногда могут быть нулевыми, когда я загружал их в приложение, им было присвоено значение DateTime.Min.
Решение состоит в том, чтобы изменить типы полей в модели на nullable:
DateTime? CreatedAt { get; set; }
DateTime? ModifiedAt { get; set; }