gpt4 book ai didi

c# - 无法创建 FluentNHibernate.Automapping.AutoMapping Namespace.Class[T] 的实例,因为 Type.ContainsGenericParameters 为真

转载 作者:太空狗 更新时间:2023-10-30 01:09:35 27 4
gpt4 key购买 nike

这是我遇到的错误

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.

这是我的类别对象

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

这是我的测试类

[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);
}
}

这是存储库类

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();
}
}
}

我做错了什么?不能使用通用存储库吗?因为我有大约 4 个对象都使用相同的存储库。

最佳答案

问题是,自动映射试图自动映射您的存储库,它不应该映射,只能映射实体。您的 RecipeConfiguration 应该告诉 FNH 要映射哪些类。

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

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

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

关于c# - 无法创建 FluentNHibernate.Automapping.AutoMapping Namespace.Class[T] 的实例,因为 Type.ContainsGenericParameters 为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6419496/

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