gpt4 book ai didi

c# - 如何映射组件集合(值对象)

转载 作者:太空宇宙 更新时间:2023-11-03 10:45:52 27 4
gpt4 key购买 nike

我有文章和图片。

Image 是值对象,Article 是实体。图像被映射为类似的组件

public class ImageMap 
{
public static Action<IComponentMapper<Image>> Mapping()
{
return c =>
{
c.Property(p => p.AltText);
c.Property(p => p.Name, m =>
{
m.Length(255);
});
c.Property(p => p.Path, m =>
{
m.Length(255);
});
c.Property(p => p.Height);
c.Property(p => p.Width);
c.Parent(x => x.Article, p => p.Access(Accessor.ReadOnly));
};
}
}

我不知道如何通过代码方法在 nhibernate 映射中映射组件列表在只有一个对象而不是集合的其他组件上,我会使用这个

ArticleMap

Component(c => c.Address, AddressMap.Mapping());

如何映射组件(图像)的集合?

Article.cs

public virtual IList<Image> Images {get; set;}

最佳答案

我们需要的是 7.2. Collections of dependent objects .虽然原理几乎与 5.1.13. <component> 的情况相同。 ,本例中的元素名称是 <composite-element> . 事实上,我们需要 IComponentElementMapper<> 的代码映射有点困惑

所以,这就是我们的映射方法

public class ImageMap 
{
// the <composite-element> as IComponentElement<>
// will replace the above mapper

// public static Action<IComponentMapper<Image>> Mapping()
public static Action<IComponentElementMapper<Image>> Mapping()
{
return c =>
{
c.Property(p => p.AltText);
c.Property(p => p.Name, m =>
{
m.Length(255);
});
c.Property(p => p.Path, m =>
{
m.Length(255);
});
c.Property(p => p.Height);
c.Property(p => p.Width);
c.Parent(x => x.Article, p => p.Access(Accessor.ReadOnly));
};
}
}

现在我们将通过它,正如 Adam Bar 在此处记录的那样 Mapping-by-Code - Set and Bag ,进入映射

// mapping for property:
// public virtual IList<Image> Images {get; set;}

Bag(x => x.Images // reference
, b => { } // bag properties mapper
, v => v.Component(ImageMap.Mapping()) // here we pass the <composite-element>
);

并且 xml 结果将如预期的那样:

<bag name="Images" ... >
<key column="ArticleId" ... />
<composite-element class="Occupation">
<parent name="Article" access="readonly" />
<property name="AltText" />
<property name="Name" length="255" />
...
</composite-element>
</bag>

关于c# - 如何映射组件集合(值对象),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23456139/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com