Nhibernate:一对多关系正在导致泛型异常

Nhibernate:一对多关系正在导致泛型异常,nhibernate,Nhibernate,我得到了以下例外,我很确定这与类别和产品之间的一对多关系有关。怎么了 Nhibernate.Exceptions.GenericADOException {“无法执行批处理命令。[SQL:SQL不可用]”} 内部异常: {“INSERT语句与外键约束“FK1F94D86A1B57B09E”冲突。冲突发生在数据库“SimpleNhibernate\”表“dbo.Category\”列“Id”中。\r\n语句已终止。“” Program.cs class Program { private

我得到了以下例外,我很确定这与类别和产品之间的一对多关系有关。怎么了

Nhibernate.Exceptions.GenericADOException {“无法执行批处理命令。[SQL:SQL不可用]”}

内部异常: {“INSERT语句与外键约束“FK1F94D86A1B57B09E”冲突。冲突发生在数据库“SimpleNhibernate\”表“dbo.Category\”列“Id”中。\r\n语句已终止。“”

Program.cs

class Program
{
    private static ISessionFactory _sessionFactory;
    private static Configuration _configuration;

    static void Main(string[] args)
    {

        _configuration = new Configuration();
        _configuration.Configure();
        _configuration.AddAssembly(typeof(Product).Assembly);
        _sessionFactory = _configuration.BuildSessionFactory();

        var schema = new SchemaExport(_configuration);
        schema.Drop(true, true);
        schema.Create(true, true);

        AddCategory(new Category("Phone"));
        AddCategory(new Category("Smart Phone"));

        using (ISession session = NHibernateHelper.OpenSession())
        {
            var categories = session.QueryOver<Category>().List();                
            foreach (var category in categories)
            {
                using (ITransaction transaction = session.BeginTransaction())
                {
                    session.Save(new Product("iPhone", category));      
                    transaction.Commit(); 


                }
            }
        }

    }

    private static void AddCategory(Category product)
    {
        using (ISession session = NHibernateHelper.OpenSession())
        using (ITransaction transaction = session.BeginTransaction())
        {
            session.Save(product);
            transaction.Commit();
        }
    }
}
using System;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Iesi.Collections.Generic;
namespace SimpleNhibernate
{
    public class Category
    {
        public virtual Guid Id { get; set; }
        public virtual string Name { get; set; }
        public virtual ISet<Product> Products { get; set; }
        public virtual bool Discontinued { get; set; }

        public Category() { }

        public Category(string name)
        {
            Name = name;
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SimpleNhibernate
{
    public class Product
    {
        public virtual Guid Id { get; set; }
        public virtual string Name { get; set; }
        public virtual Category Category { get; set; }
        public virtual bool Discontinued { get; set; }

        public Product() { }
        public Product(string name, Category category)
        {
            Name = name;
            Category = category;
        }
    }
}

负责映射(两个方向)的列是产品表中的
CategoryID

因此,
集合
应该有如下键

 <class name="Category">
    ...
    <set name="Products" inverse="true" >
      <key column="CategoryID" /> // instead of Id

...
//而不是Id
与产品映射中的相同

<many-to-one name="Category" column="CategoryID"></many-to-one>

 <class name="Category">
    ...
    <set name="Products" inverse="true" >
      <key column="CategoryID" /> // instead of Id
<many-to-one name="Category" column="CategoryID"></many-to-one>