c# - 流畅的 NHibernate 装饰实体

标签 c# fluent-nhibernate poco

使用 POCO 和 Fluent NHibernate,我希望能够获取像 User 这样的对象并能够为其提供各种属性。我希望这些对象能够专注于它们的属性,而不是公共(public)属性。目前,我有一个 AuditableEntity,我可以从中派生,使我的实体能够拥有诸如 CreatedDateTime 和 ModifiedDateTime 之类的审核属性,但我也希望能够消除为每个对象实现 Id 的需要,Id 应该能够成为某个其他基础对象的一部分,所以我可以说这个对象有一个 Guid Id,这个对象有一个 int id,而这个对象没有 Id。目前,我的 User 对象如下所示:

用户.cs

namespace ZeroBase.Domain.Entities
{
public class User : AuditableEntity<User>
{
    public virtual Guid Id { get; set; }
    public virtual string Username { get; set; }
    public virtual string Password { get; set; }
    public virtual string FirstName { get; set; }
    public virtual string LastName { get; set; }
    public virtual string EmailAddress { get; set; }
    public virtual IEnumerable<Comment> Comments { get; set; }
}
}

我的 UserMap 看起来像这样:

UserMap.cs

namespace ZeroBase.Infrastructure.Data
{
public class UserMap : AuditMap<User>
{
    public UserMap()
    {
        Id(x => x.Id)
            .Column("Id")
            .GeneratedBy.Guid();
        Map(x => x.Username);
        Map(x => x.Password);
        Map(x => x.FirstName);
        Map(x => x.LastName);
        Map(x => x.EmailAddress);
        HasMany(x => x.Comments);
        Table("Users");
    }
}
}

是否有办法在某种通用基类中处理 Id 创建,并且仍然有一个单独的类可供对象继承以使其可审计?

最佳答案

您是否将 AuditableEntity 用于没有 id 的类? Entity 意味着该类具有标识。基于此,我想说您可以向 AuditableEntity 添加 Id 属性。

如果您将它用于没有标识的类(例如值对象),我将创建另一个基类。这样的事情有意义吗?

class Entity {
    Guid Id { get; set; } 

    public Entity() {
        Id = Guid.NewGuid();
    }
}

interface IAuditable<T> {
    DateTime CreatedAt {get; set; }
    // ...
}

class AuditableEntity<T> : Entity, IAuditable<T> {
    DateTime CreatedAt { get; set; }
}

class AuditableValueObject<T> : IAuditable<T> {
    DateTime CreatedAt { get; set; }
}

// Class that has both an identity and is auditable
class User : AuditableEntity<User> {
    // ..
}

// Class without an identity but auditable
class Money : AuditableValueObject<Money> {
    // ..
}

// Class with an identity but not auditable
class Customer : Entity {
    // ..
}

注意:实体、值对象等是 Domain Driven Design 的术语(DDD)。

关于c# - 流畅的 NHibernate 装饰实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10955212/

相关文章:

c# - 如何将 Crystal 报表绑定(bind)到手动创建的DataSet

c# - 如何在 .NET c# 中使用 Win32 GetMonitorInfo()?

c# - 我可以将 Visual Studio 2017 连接到免费的 000webhost MySql 数据库吗?

nhibernate - Fluent Nhibernate 删除不规则性

c# - 转换T4模板以连接MySQL数据库?

c++ - 链接 POCO C++ 库会导致大量内存泄漏

c# - asp.net ffmpeg 视频编码挂起

c# - 流畅的 nhibernate 复制一个完整的实体

view - 映射以查看自定义字段名称 - 一对一关系

c# - Entity Framework - 多个数据库连接