我有一个以流畅的nhibernate映射的类,但我希望映射忽略其中一个类属性.
使用下面的类和映射我得到此错误:
以下类型不能用作代理:iMasterengine.Data.Model.Calendar:方法get_HasEvents应该是虚拟的
//my class
public class Calendar : IEntity {
public virtual int Id { get; private set; }
public virtual string Name { get; set; }
public virtual string SiteId { get; set; }
public virtual IList<CalendarEvent> Events { get; set; }
//ignore this property
public bool HasEvents { get { return Events.Count > 0; } }
}
//my mapping
public class CalendarMap : ClassMap<Calendar> {
public CalendarMap() {
Id(x => x.Id);
Map(x => x.Name);
Map(x => x.SiteId); …Run Code Online (Sandbox Code Playgroud) 以这堂课为例:
public class Category : PersistentObject<int>
{
public virtual string Title { get; set; }
public virtual string Alias { get; set; }
public virtual Category ParentCategory { get; set; }
public virtual ISet<Category> ChildCategories { get; set; }
public /*virtual*/ void Add(Category child)
{
if (child != null)
{
child.ParentCategory = this;
ChildCategories.Add(child);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在没有add方法的虚拟关键字的情况下运行应用程序时,我收到此错误:
Run Code Online (Sandbox Code Playgroud)method Add should be 'public/protected virtual' or 'protected internal virtual'
我理解为什么属性需要声明为虚拟,因为它需要被延迟加载功能覆盖.
但我不明白为什么需要将方法声明为虚拟...它们需要被覆盖的原因是什么?
这非常令人困惑!
我需要一些帮助来设置我的Fluent NHibernate POCO类结构.我试图让一个方法使一个对象可审计.在创建时,我希望我的创建和修改日期时间设置和更新,我希望我的修改更新.我一直在关注一些例子,但我遇到了障碍.这是我目前的设置:
IAuditable.cs
namespace ZeroBase.Domain.Entities
{
public interface IAuditable
{
DateTime Created
{
get;
}
DateTime Modified
{
get;
}
string CreatedPropertyName
{
get;
}
string ModifiedPropertyName
{
get;
}
void SetCreationDate(DateTime created);
void SetModifiedDate(DateTime modified);
}
}
Run Code Online (Sandbox Code Playgroud)
AuditableEntity.cs
namespace ZeroBase.Domain.Entities
{
public class AuditableEntity<T> : IAuditable
{
public DateTime Created { get; private set; }
public DateTime Modified { get; private set; }
void IAuditable.SetCreationDate(DateTime created)
{
this.Created = created;
}
void IAuditable.SetModifiedDate(DateTime modified)
{
this.Modified = modified; …Run Code Online (Sandbox Code Playgroud)