Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Fluent NHibernate与自动映射的关系问题_C#_Fluent Nhibernate - Fatal编程技术网

C# Fluent NHibernate与自动映射的关系问题

C# Fluent NHibernate与自动映射的关系问题,c#,fluent-nhibernate,C#,Fluent Nhibernate,我制作了一个简单的示例应用程序来测试带有自动映射功能的Fluent NHibernate,但在保存时出现了一个异常 我的示例如下所示: public class Item { public virtual int Id { get; protected set; } public virtual string Name { get; set; } public virtual IList<Detail> Details { get; set; } p

我制作了一个简单的示例应用程序来测试带有自动映射功能的Fluent NHibernate,但在保存时出现了一个异常

我的示例如下所示:

public class Item  {
    public virtual int Id { get; protected set; }
    public virtual string Name { get; set; }
    public virtual IList<Detail> Details { get; set; }
    public Item() {
        Details = new List<Detail>();
    }
}
public class Detail {
    public virtual int Id { get; protected set; }
    public virtual int ItemId { get; set; }
    public virtual string Name { get; set; }
}
class Program {
    static void Main(string[] args) {
        var sessionFactory = CreateSessionFactory();
        using (var session = sessionFactory.OpenSession()) {
            using (var transaction = session.BeginTransaction()) {

                Console.WriteLine("Enter name for new item: ");
                var itemName = Console.ReadLine();
                var page = new Item { Name = itemName };
                Console.WriteLine("Enter name of new detail");
                var detailName = Console.ReadLine();
                var detail = new Detail {Name = detailName };
                page.Details.Add(detail);
                session.SaveOrUpdate(page);
                transaction.Commit();
            }
            using (session.BeginTransaction()) {
            }
            Console.ReadKey();
        }

    }
    private static ISessionFactory CreateSessionFactory() {

        var model = AutoMap.AssemblyOf<Program>();

        var sessionFactory = Fluently.Configure()
          .Database(MsSqlConfiguration.MsSql2008.ConnectionString(connection)
          .Cache(c => c.UseQueryCache()
            .ProviderClass<HashtableCacheProvider>())
            .ShowSql())
          .Mappings(m => m.AutoMappings.Add(model))
          .BuildSessionFactory();

        return sessionFactory;
    }
}
公共类项目{
公共虚拟整数Id{get;protected set;}
公共虚拟字符串名称{get;set;}
公共虚拟IList详细信息{get;set;}
公共项目(){
详细信息=新列表();
}
}
公共类详细信息{
公共虚拟整数Id{get;protected set;}
公共虚拟int ItemId{get;set;}
公共虚拟字符串名称{get;set;}
}
班级计划{
静态void Main(字符串[]参数){
var sessionFactory=CreateSessionFactory();
使用(var session=sessionFactory.OpenSession()){
使用(var transaction=session.BeginTransaction()){
Console.WriteLine(“输入新项目的名称:”);
var itemName=Console.ReadLine();
var page=新项{Name=itemName};
Console.WriteLine(“输入新细节的名称”);
var detailName=Console.ReadLine();
var detail=new detail{Name=detailName};
第页。详细信息。添加(详细信息);
会话。保存或更新(第页);
Commit();
}
使用(session.BeginTransaction()){
}
Console.ReadKey();
}
}
私有静态ISessionFactory CreateSessionFactory(){
var model=AutoMap.AssemblyOf();
var sessionFactory=fluntly.Configure()
.Database(MsSqlConfiguration.MsSql2008.ConnectionString(连接)
.Cache(c=>c.UseQueryCache()
.ProviderClass())
.ShowSql())
.Mappings(m=>m.AutoMappings.Add(模型))
.BuildSessionFactory();
返回工厂;
}
}
当transaction.Commit()正在运行且对象引用未保存的临时实例时,此代码引发异常-在刷新之前保存临时实例


有谁能帮我找出问题所在吗?

您的
详细信息
实例是“暂时的”,这意味着它尚未添加到您的NHibernate会话中

您有两种选择,其中#2可能是您的首选:

1)
会话。刷新会话前保存(详细信息)

2) 配置要级联的
详细信息
集合


当您使用自动映射功能时,有许多方法可以配置级联-我通常更喜欢使用
[Cascade]
属性“污染”我的域模型,然后创建一个简单的
IHasManyConvention
IReferenceConvention
实现,检查属性的存在并相应地设置级联选项。

我可以在FluentNHibernate程序集中找到级联属性吗?我应该用这个属性装饰我的类och属性吗?如果不太麻烦的话,你能给我举个例子就好了。谢谢你知道吗,我刚刚写了一篇关于这个东西的帖子:-事实上,我不知道FNH中有一个
CascadeAttribute
,我说的是我自己的。我不知道FNH中的那个是做什么的。对不起,没有看到问号:)好吧,正如你现在可能知道的:FNH中没有对级联存储的本地支持,这听起来有点奇怪,无论如何,我已经在我的项目中包含了CascadeConvention代码,甚至没有在我的配置中使用它,我得到了这个错误:名称空间“urn:nhibernate-mapping-2.2”中的元素“class”的内容不完整。命名空间“urn:nhibernate-mapping-2.2”中需要的可能元素列表:“meta、subselect、cache、synchronize、comment、tuplizer、id、composite id”。此错误仅出现在我的项目中的类中。此错误可能来自将拾取作为实体的约定。确保您的自动映射配置为仅映射实体类-例如,仅在一个特定命名空间中包含类:
new AutoPersistenceModel().AddEntityAssembly(typeof(Base).Assembly.Where(type=>type.namespace!=null&&type.namespace.Contains(“实体”)