小编Dan*_*ing的帖子

自动映射器无法映射IEnumerable

我有两个类,所以:

public class SentEmailAttachment : ISentEmailAttachment
{
    public SentEmailAttachment();

    public string FileName { get; set; }
    public string ID { get; set; }
    public string SentEmailID { get; set; }
    public string StorageService { get; set; }
    public string StorageServiceFileID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

public class SentEmailAttachmentItem : ISentEmailAttachment
{
    [ItemName]
    public string ID { get; set; }
    public string SentEmailID { get; set; }
    public string FileName { get; set; }
    public string StorageService { get; set; …
Run Code Online (Sandbox Code Playgroud)

c# automapper

48
推荐指数
2
解决办法
3万
查看次数

使用AutoMapper取消DTO

我一直在尝试使用AutoMapper来节省从我的DTO到我的域对象的时间,但是我在配置地图时遇到了麻烦,以至于它工作正常,我开始怀疑AutoMapper是否可能是错误的工具工作.

考虑这个域对象的例子(一个实体和一个值):

public class Person
{
    public string Name { get; set; }
    public StreetAddress Address { get; set; }
}

public class StreetAddress
{
    public string Address { get; set; }
    public string City { get; set; }
    public string State { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我的DTO(来自Linq-to-SQL对象)的出现大致如下:

public class PersonDTO
{
    public string Name { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
    public string State { get; set; } …
Run Code Online (Sandbox Code Playgroud)

mapping automapper

39
推荐指数
5
解决办法
2万
查看次数

NHibernate 3.2 Loquacious API入门

我正在开始一个新项目,我想使用NHibernate 3.2.我知道它现在可以做类似于FluentNHibernate的事情,我想尝试一下.

但是我很难找到关于Loquacious API的文档.我已经看过关于如何配置ISessionFactory的博客 文章,但在此之后我就迷路了.我知道3.2 API正在快速发展,大约3到4个月的文章已经过时,但我正在寻找最新的信息.

我在哪里可以找到有关的资源:

  • 如何在不使用FluentNHibernate且不使用ConfORM的情况下设置NHibernate 3.2而不使用XML?

  • 如何注册映射?

  • 如何创建约定?

请记住,这与NHibernate 3.2(可能在上面)有关.如果映射和约定等任何概念不再适用,请您指出正确的方向吗?

我对NHibernate和FluentNHibernate有一些经验,因为我将它们用于一个小项目,但它并不是很复杂.

c# nhibernate nhibernate-mapping-by-code

26
推荐指数
2
解决办法
7209
查看次数

实体框架+ AutoMapper(实体到DTO和DTO到实体)

我在使用EF和AutoMapper时遇到了一些问题.= /

例如 :

我有2个相关实体(客户和订单),他们是DTO课程:


class CustomerDTO
{
   public string CustomerID {get;set;}
   public string CustomerName {get;set;}
   public IList< OrderDTO > Orders {get;set;}
}

class OrderDTO { public string OrderID {get;set;} public string OrderDetails {get;set;} public CustomerDTO Customers {get;set;} }

//when mapping Entity to DTO the code works Customers cust = getCustomer(id); Mapper.CreateMap< Customers, CustomerDTO >(); Mapper.CreateMap< Orders, OrderDTO >(); CustomerDTO custDTO = Mapper.Map(cust);

//but when i try to map back from DTO to Entity it fails with AutoMapperMappingException. Mapper.Reset(); Mapper.CreateMap< CustomerDTO …

Run Code Online (Sandbox Code Playgroud)

c# entity-framework dto automapper

20
推荐指数
4
解决办法
4万
查看次数

如何控制.NET DataContract序列化,以便它使用XML属性而不是元素?

如果我有一个标记为a的类DataContract和一些标记有DataMember属性的属性,我可以轻松地将其序列化为XML,但它会创建如下的输出:

<Person>
    <Name>John Smith</Name>
    <Email>john.smith@acme.com</Email>
    <Phone>123-123-1234</Phone>
</Person>
Run Code Online (Sandbox Code Playgroud)

我更喜欢的是属性,比如......

<Person Name="John Smith" Email="john.smith@acme.com" Phone="123-123-1234" />
Run Code Online (Sandbox Code Playgroud)

DataMember属性允许我控制名称和顺序,但不能控制它是否被序列化为元素或属性.我环顾四周找到了DataContractFormat,IXmlSerializable但我希望有更简单的解决方案.

最简单的方法是什么?

.net serialization xml-serialization datacontract

16
推荐指数
2
解决办法
3万
查看次数

为什么AutoMapper有一个看似更强大的ValueResolver时会有一个IValueFormatter?

它看起来像是一个IValueFormatter类型的值object并返回一个类型的值string,而a ValueResolver<TSource, TDestination>取任何类型的值并返回任何类型的值.所以,它更灵活.还有一个问题是,使用a ValueResolver,您永远不需要将源转换为特定类型 - 您可以在类定义中明确定义它.

鉴于此,为何使用IValueFormatter?它做了什么不能做的事情ValueResolver吗?我误解了它是如何工作的吗?

c# mapping automapper

15
推荐指数
1
解决办法
2478
查看次数

奇怪的linq到nhibernate问题,来自'System.Int32'的无效转换

调用以下代码中的Get工作正常:

public class ContractService : IContractService
{
    private readonly IRepository<Contract> repository;

    public ContractService(IRepository<Contract> repository)
    {
        this.repository = repository;
    }

    public Contract Get(int contractId)
    {
        return repository.Query().Where(x => x.Id == contractId).FirstOrDefault();
    }
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时:

public class ContractService : CRUDService<Contract>, IContractService
{
    public ContractService(IRepository<Contract> repository) : base(repository)
    {
    }
}


public class CRUDService<TEntity> : ICRUDService<TEntity> where TEntity : IEntity
{
    protected readonly IRepository<TEntity> repository;

    public CRUDService(IRepository<TEntity> repository)
    {
        this.repository = repository;
    }

    public TEntity Get(int id)
    {
        var entities = this.repository.Query().Where(s => s.Id …
Run Code Online (Sandbox Code Playgroud)

nhibernate linq-to-nhibernate

12
推荐指数
1
解决办法
1879
查看次数

自我引用Fluent NHibernate中的多对多关系自动化自动化为1:n而不是n:n

标题几乎解释了这一切,我有一个成员对象,引用也是类型成员的'朋友'.

public class Member : Entity
    {
        public Member()
        {            
            Friends = new List<Member>();
        }

        public virtual IList<Member> Friends
        {
            get; set;
        }
     }
Run Code Online (Sandbox Code Playgroud)

模式生成工具使其成为1:n关系,而它应该是:n关系,即将列添加到名为member_id的成员表中,并且不创建连接表.

有没有办法让自我在Fluent NHibernate中引用多对多的关系?

我尝试使用之前得到的覆盖作为答案:

public class MemberOverride : IAutoMappingOverride<Member>
{
    public void Override(AutoMapping<Member> mapping)
    {
        mapping.HasManyToMany(m => m.Friends)
               .Table("MemberFriendsLinkTable");
    }
}
Run Code Online (Sandbox Code Playgroud)

但我收到错误信息:

"NHibernate.MappingException:集合映射中的重复列:Proj.BO.Member.Friends列:Member_id"

谢谢

编辑:我找到了答案,它是:

mapping.HasManyToMany(m => m.Friends).ParentKeyColumn("Member_Id").ChildKeyColumn("Friend_Id")
                   .Table("MemberFriendsLinkTable").Inverse().Cascade.SaveUpdate();
Run Code Online (Sandbox Code Playgroud)

.net c# nhibernate fluent-nhibernate

10
推荐指数
1
解决办法
1995
查看次数

使用Fluent nHibernate映射到多个表

这是我的情况..
假设您有以下模型实体,它们自己代表单个表:

Movies [Movie_Id,Title,Rating,..]
Actors [Actor_Id,FirstName,LastName,..]
Director [Director_Id,FirstName,LastName ,..]

和另一个名为"Recommendations"的实体/表,它代表网站内用户之间的建议.这个想法是推荐可以是任何类型,即推荐演员或推荐电影的人.基本上,表格看起来应该是这样的:

建议书 [Recommendation_Id,Object_Id,Object_Type,..]

这就是我坚持的内容.如何在nHibernate中使用Fluent映射这些关系?我的意思是..在映射时,我不能指定Type(与哪个表相关)'因为它是在运行时确定的,但我不能仅仅依赖于Id'因为它本身并不意味着它属于哪个表.
例如,想象一下在Recommendations表上的这条记录:

Recommendation_Id - Object_Id - Object_Type
83001--4010123 ---"M"

基本上我存储一个字符标识符(在本例中为"M"代表表"Movies")知道Object_Id属于哪个表.我不能只在没有Object_Type的情况下存储Object_Id ..

作为最后的评论,我想补充一点,我已经看到了所有每个类的表,每个子类的表,每个具体的表类示例,但我相信这些都不适合这种情况,因为Movies_Id,Actors_Id,Directors_Id,......在它们之间都是不同的,所以Recommendations_Id也是如此.我的意思是,这里没有基类 - 子类继承,它们根本不共享Id.

我希望我能说清楚.提前致谢.

mapping nhibernate fluent-nhibernate

8
推荐指数
1
解决办法
2907
查看次数

NHibernate HQL:带有"with"子句的左外连接不起作用

在EAV系统中,我有一个如下所示的映射:

<class name="Record">
   <map name="Values" table="RecordFieldValue">
      <key column="RecordFK">
      <index column="FieldFK">
      <element column="Value">
   </map>
</class>
Run Code Online (Sandbox Code Playgroud)

我想选择一些记录,按特定字段的每个记录的值排序.但请注意,并非所有记录实际上都具有该字段的值.在这种情况下,仍应提取记录并使用空值进行排序.

所需的SQL如下所示:

select rec.*, val.Value
from Record rec
left outer join RecordFieldValue val
on val.RecordFK = rec.PK and val.FieldFK = :field
order by val.Value
Run Code Online (Sandbox Code Playgroud)

经过大量挖掘后,我发现在HQL中修改左连接的"on"子句的正确方法是使用"with"关键字(参见https://nhibernate.jira.com/browse/NH-514) .所以我尝试了这个HQL:

from Record rec
left join rec.Values vals with index(vals) = :field
order by vals
Run Code Online (Sandbox Code Playgroud)

不幸的是,这会产生以下错误:with子句表达式没有引用与子句相关联的from子句元素.所以我尝试了这个:

from Record rec
left join rec.Values vals with index(rec.Values) = :field
order by vals
Run Code Online (Sandbox Code Playgroud)

但是这产生了一个新的错误:with子句只能引用驱动表中的列.

有关如何使这项工作的任何想法?谢谢.

- 布莱恩

nhibernate hql sql-order-by left-join

7
推荐指数
1
解决办法
1万
查看次数