使用 FluentNhibernate 和 Autofac 的映射接口

Posted

技术标签:

【中文标题】使用 FluentNhibernate 和 Autofac 的映射接口【英文标题】:Mapping interface using FluentNhibernate and Autofac 【发布时间】:2018-12-17 11:52:02 【问题描述】:

我有一个棘手而极端的问题,我如何使用 FluentNHibernate 来映射接口?请按照下面的示例进行操作: 我有一个界面:

public interface IUser

    String Name  get; set; 
    City City  get; set; 

我有一个实现这个接口的类:

public class User : IUser

    String Name  get; set; 
    ICity City  get; set; 

考虑一下,女巫也存在一个用于 City 的类,并包含一个名为 Country 的属性,并且也存在于它的接口中...... 我需要使用 FluentNHibernate 进行如下映射:

public class UserMap : ClassMap<IUser>

    public UserMap()
    
       Map(e => e.Name);
       References<City>(x => x.City).Cascade.All();
    

public class CityMap: ClassMap<ICity>

    public CityMap()
    
        Map(e => e.Country);
    

【问题讨论】:

【参考方案1】:

映射接口好像是supported:

命名的持久类是一个接口是完全可以接受的。然后,您将使用 &lt;subclass&gt; 元素声明该接口的实现类。

我想,&lt;subclass&gt; 元素在 Fluent NHibernate 中的等价物是 SubclassMap&lt;T&gt;。因此,虽然不清楚你的实际问题是什么,但你可以试试这个吗:

public class UserMap : SubclassMap<IUser>



public class CityMap: SubclassMap<ICity>


【讨论】:

以上是关于使用 FluentNhibernate 和 Autofac 的映射接口的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 FluentNHibernate 创建 ISessionFactory

如何使用 Fluent NHibernate 自动映射禁用特定抽象基类的子类化

使用FluentNHibernate引用的CustomType

FluentNHibernate - 如何在没有任何身份字段的情况下进行映射

FluentNHibernate:DateTime的默认精度是否改变了?

架构之路之ORM--FluentNHibernate之AutoMapping详解