我能想出的最佳头衔,但更多参与其中。
// Hit the database once and get all the categories;
IQueryable<Category> qryCategoryList = _repository.Select<Category>();
// get initial parents
var parentCategories = qryCategoryList.Where(x => x.ParentCategoryId == null);
foreach (Category parentCategory in parentCategories)
{
HttpContext.Current.Response.Write(parentCategory.CategoryName = "This should not happen");
BuildCategoryList(qryCategoryList, parentCategory.CategoryId);
}
这一行
HttpContext.Current.Response.Write(parentCategory.CategoryName = "This should not happen");
执行此
UPDATE Categories
SET ParentCategoryId = NULL /* @p0_0 */,
CategoryName = '->' /* @p1_0 */,
CategoryDescription = 'The Fruit Category' /* @p2_0 */,
Active = 1 /* @p3_0 */,
DateCreated = '2012-01-20T12:03:41.00' /* @p4_0 */,
LastUpdated = '2012-01-20T12:03:41.00' /* @p5_0 */
WHERE CategoryId = 'aa8ca9ba-663c-45c8-950b-159a28e6635d' /* @p6_0 */
我不是要从我的存储库调用save而不想进行更新。这怎么可能?
编辑:这是映射
public class CategoryMap : ClassMap<Category>
{
public CategoryMap()
{
Table("Categories");
LazyLoad();
Id(x => x.CategoryId).GeneratedBy.GuidComb().Column("CategoryId");
Map(x => x.ParentCategoryId).Column("ParentCategoryId");
Map(x => x.CategoryName).Column("CategoryName").Not.Nullable().Length(50);
Map(x => x.CategoryDescription).Column("CategoryDescription").Not.Nullable();
Map(x => x.Active).Column("Active").Not.Nullable();
Map(x => x.DateCreated).Column("DateCreated").Not.Nullable();
Map(x => x.LastUpdated).Column("LastUpdated").Not.Nullable();
HasMany(x => x.PostingsCategories).KeyColumn("CategoryId");
}
}
答案 0 :(得分:2)
当映射或对象声明中的某些内容与数据库中的内容不相符时,通常会发生这种情况。例如,您可能在数据库中有一个可以为空的UNIQUEIDENTIFIER,但是将其映射到对象上的不可为空的Guid。 NHibernate选择,看到一个Guid.Empty而不是null,并说“嘿!对象改变了!Whelp,估计我应该更新它......”
这只是一例如何发生。如果您发布映射,我们可能会帮助您进一步调试它。
-
实际上,我应该再读一遍了。如果这属于事务范围,NHibernate将自动更新任何已更改的实体,而无需显式调用SaveOrUpdate()
。它被称为autoflush,它默认打开。如果您要明确调用FlushMode
或Never
,则需要将transaction.Commit()
设置为session.Flush()
。