开发者

Using fluent-nhibernate is it possible to automap a Value Object(s) inside an Entity?

开发者 https://www.devze.com 2023-01-04 13:05 出处:网络
I\'m using Sharp Architecture and have a number of situations where Value Objects are used in an Entity. Here is an obvious simple example:

I'm using Sharp Architecture and have a number of situations where Value Objects are used in an Entity. Here is an obvious simple example:

public class Person : Entity
{
    protected Person(){}

    public Person(string personName)
    {
        this.PersonName = personName;
    }

    public virtual string PersonName { get; protected set;}
    public virtual StreetAddress MailingAddress { get; set; }
}

public class StreetAddress : ValueObject
{
    protected StreetAddress(){}

    public StreetAddress(string address1, string address2, string city, string state, string postalCode, string country )
    {
        this.Address1 = address1;
        this.Address2 = address2;
        this.City = city;
        this.State = state;
        this.PostalCode = postalCode;
        this.Country = country;
    }

    public virtual string Address1 { get; protected set; }
    public virtual string Address2 { get; protected set; }
    public virtual string City { get; protected set; }
    public virtual string State { get; protected set; }
    public virtual string PostalCode { get; protected set; }
    public virtual string Country { get; protected set; }
}

This of course throws:

An association from the table Person refers to an unmapped class: Project.Domain.StreetAddress
because the the AutoPersistenceModelGenerator only includes classes with type IEntityWithTy开发者_如何学GopedId<>. Its not clear how Sharp Architecture expects this common condition to be implemented. Does this have to be handled with a bazillion overrides?


You could change the GetSetup() method in AutoPersistenceModelGenerator to something like:

private Action<AutoMappingExpressions> GetSetup()
    {
        return c =>
                   {
                       c.IsComponentType = type => type.BaseType == typeof (ValueObject);
                   };
    }

I'll try to get the blogpost I saw covering this posted for credit.


You would want to map this as a component. You can use the mapping overrides in Fluent NHibernate to accomplish this.


I agree with Alec. I would map this as a component.

For more information on that, see this SO question:

AutoMapping a Composite Element in Fluent Nhibernate

There, you'll also find info on how to map a collection of composite elements.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号