Unable to instantiate FluentNHibernate.Automapping.AutoMapping Namespace.Class [T] because Type.ContainsGenericParameters is true

Here is the error I get

CookBook.Tests.CategoryRepository_Fixture.Can_update_category: FluentNHibernate.Cfg.FluentConfigurationException : An invalid or incomplete configuration was used while creating a SessionFactory. Check PotentialReasons collection, and InnerException for more detail. ----> FluentNHibernate.Cfg.FluentConfigurationException : An invalid or incomplete configuration was used while creating a SessionFactory. Check PotentialReasons collection, and InnerException for more detail. ----> System.ArgumentException : Cannot create an instance of FluentNHibernate.Automapping.AutoMapping`1[CookBook.Repository.Repository`1[T]] because Type.ContainsGenericParameters is true. 

here is my Category object

 public class Category { public virtual int Id { get; set; } public virtual string Name { get; set; } } 

here is my test class

 [TestFixture] class CategoryRepository_Fixture { private ISessionFactory _sessionFactory; private RecipeConfiguration _configuration; private readonly Category[] _categories = new[] { new Category{Name="Dinner"}, new Category{Name="Breakfast"}, new Category{Name="Lunch"}, new Category{Name="Breakfast"} }; private void CreateInitialData() { using (ISession session = _sessionFactory.OpenSession()) using (ITransaction transaction = session.BeginTransaction()) { foreach (var category in _categories) { session.Save(category); } transaction.Commit(); } } [TestFixtureSetUp] public void TestFixtureSetUp() { _configuration = new RecipeConfiguration(); _sessionFactory = Fluently.Configure() .Database(MsSqlCeConfiguration.Standard.ShowSql().ConnectionString("Data Source=CookBook.sdf")) .Mappings(m => m.AutoMappings.Add(AutoMap.AssemblyOf<Category>(_configuration))) .ExposeConfiguration(config => new SchemaExport(config).Execute(false, true, false)) .BuildSessionFactory(); } [SetUp] public void SetupContext() { CreateInitialData(); } [Test] public void Can_add_new_category() { Category cat = new Category { Name = "Dessert" }; IRepository<Category> repository = new Repository<Category>(); repository.Add(cat); using (ISession session = _sessionFactory.OpenSession()) { var fromDb = session.Get<Category>(cat.Id); Assert.IsNotNull(fromDb); Assert.AreNotSame(cat, fromDb); Assert.AreEqual(cat.Name, fromDb.Name); } } 

Here is the repository class

 public class Repository<T> : IRepository<T> { #region IRepository Members public void Add(T obj) { using(ISession session = NHibernateHelper.OpenSession()) using (ITransaction transaction = session.BeginTransaction()) { session.Save(obj); transaction.Commit(); } } } 

What am I doing wrong? Is it possible to use a shared repository? because I have about 4 objects that use the same repository.

+4
source share
1 answer

the problem is that automation is trying to automate your repository, that it should not display only objects. your RecipeConfiguration should tell FNH which classes should be displayed.

 public bool ShouldMap(Type type) { return type.In(typeof(Category), typeof(Foo)); } 

or

 public bool ShouldMap(Type type) { return type.Namespace == "MyNamespace.Mappings" } 

or

 AutoMap.AssemblyOf<Category>(t => t.Namespace == "MyNamespace.Mappings")) 
+5
source

All Articles