Sco*_*wan 4 mysql fluent-nhibernate automapping
摘要:
我想用Fluent NHibernate Automapper保存两个相同名称和不同名称空间的类
上下文
我写的是必须将许多不同的对象导入数据库进行测试.我最终会将mappers写成一个合适的模型.
我一直在使用code gen和Fluent NHibernate来获取这些DTO并将它们直接转储到db.
例外情况确实说(尝试使用auto-import ="false")
码
public class ClassConvention : IClassConvention
{
public void Apply(IClassInstance instance)
{
instance.Table(instance.EntityType.Namespace.Replace(".", "_"));
}
}
namespace Sample.Models.Test1
{
public class Test
{
public virtual int Id { get; set; }
public virtual string Something { get; set; }
}
}
namespace Sample.Models.Test2
{
public class Test
{
public virtual int Id { get; set; }
public virtual string SomethingElse { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
这是实际的应用程序代码
var model = AutoMap.AssemblyOf<Service1>()
.Where(t => t.Namespace.StartsWith("Sample.Models"))
.Conventions.AddFromAssemblyOf<Service1>();
var cfg = Fluently.Configure()
.Database(
MySQLConfiguration.Standard.ConnectionString(
c => c.Is("database=test;server=localhost;user id=root;Password=;")))
.Mappings(m => m.AutoMappings.Add(model))
.BuildConfiguration();
new SchemaExport(cfg).Execute(false, true, false);
Run Code Online (Sandbox Code Playgroud)
谢谢,我非常感谢任何帮助
使用Fluent Nhibernate RC1进行更新
来自 James Gregory的fluent-nhibernate论坛的解决方案
今晚好好看看这个.基本上,它是由AutoImport提到的异常; 当NHibernate给出第一个映射时,它看到实体以完整的程序集限定名称命名,并为短名称创建导入(有用!),然后当你添加第二个时它然后抱怨这个导入现在发生冲突.所以解决方案是关闭自动导入; 不幸的是,我们没有办法在RC中做到这一点...我刚刚提交了一个修复程序,增加了在约定中更改此功能的能力.因此,如果您获得最新的二进制文件或源代码,您应该能够更改附加项目中的约定行以执行此操作:
.Conventions.Setup(x => {
x.AddFromAssemblyOf<Program>();
x.Add(AutoImport.Never()); });
Run Code Online (Sandbox Code Playgroud)
这会添加您在程序集中定义的所有约定,然后使用其中一个帮助程序约定来关闭自动导入.
小智 6
我无法使用FoursMappings的约定(与AutoMappings相比)使其工作.但是,以下内容适用于我,但必须将其添加到每个需要的ClassMap中.
public class AMap : ClassMap<A>
{
public AMap()
{
HibernateMapping.Not.AutoImport();
Map(x => x.Item, "item");
...
}
}
Run Code Online (Sandbox Code Playgroud)