【发布时间】:2014-01-28 14:55:15
【问题描述】:
我可能已经阅读了与此问题类似的每篇 Stackoverflow 帖子,但无法弄清楚发生了什么。
我必须对学生和教育背景进行分类,一个学生可以有一个或多个教育背景,从而形成一对多的关系。
映射文件:
Student.hbm.xml
<class name="Student" table="student">
<id name="Id" column="id">
<generator class="guid" />
</id>
<property name="Code" column="code" />
<property name="DateTimeCreated" column="datetime_created" />
<property name="FirstName" column="first_name" />
<property name="MiddleName" column="middle_name" />
<property name="LastName" column="last_name" />
<property name="BirthDate" column="birth_date" />
<property name="HomePhone" column="home_phone" />
<property name="Mobile" column="mobile" />
<property name="HomeAddress" column="home_address" />
<property name="CountryCode" column="country_code" />
<property name="ZipCode" column="zip_code" />
<property name="MotherName" column="mother_name"/>
<property name="MotherAddress" column="mother_address" />
<property name="MotherContactNo" column="mother_contact_no" />
<property name="FatherName" column="father_name" />
<property name="FatherAddress" column="father_address" />
<property name="FatherContactNo" column="father_contact_no" />
<property name="CreatedById" column="created_by_id" />
<bag name="EducationalBckgrnd" table="student_educ_bckgrnd" inverse="true" cascade="all">
<key column="student_id" />
<one-to-many class="StudentEducBckgrnd" />
</bag>
StudentEducBckgrnd.hbm.xml
<class name="StudentEducBckgrnd" table="student_educ_bckgrnd">
<id name="Id" column="id">
<generator class="guid" />
</id>
<!--<property name="StudentId" column="student_id" type="System.Guid" insert="false" />-->
<property name="SchoolName" column="school_name" />
<property name="Remarks" column="remarks" />
<property name="From" column="from" />
<property name="To" column="to" />
<many-to-one name="EnrolledStudent" class="Student" column="student_id" />
如果我不注释掉上面的 StudentId 属性,我会得到参数索引错误。
Student.cs
public class Student
{
public virtual IList<StudentEducBckgrnd> EducationalBckgrnd { get; set; }
public virtual Guid Id { get; set; }
public virtual string Code { get; set; }
public virtual DateTime DateTimeCreated { get; set; }
public virtual string FirstName { get; set; }
public virtual string MiddleName { get; set; }
public virtual string LastName { get; set; }
public virtual DateTime BirthDate { get; set; }
public virtual string HomePhone { get; set; }
public virtual string Mobile { get; set; }
public virtual string HomeAddress { get; set; }
public virtual string CountryCode { get; set; }
public virtual string ZipCode { get; set; }
public virtual string MotherName { get; set; }
public virtual string MotherAddress { get; set; }
public virtual string MotherContactNo { get; set; }
public virtual string FatherName { get; set; }
public virtual string FatherAddress { get; set; }
public virtual string FatherContactNo { get; set; }
public virtual Guid CreatedById { get; set; }
public Student()
{
EducationalBckgrnd = new List<StudentEducBckgrnd>();
}
}
StudentEducBckgrnd.cs
public class StudentEducBckgrnd
{
public virtual Guid Id { get; set; }
public virtual Guid StudentId { get; set; }
public virtual string SchoolName { get; set; }
public virtual string From { get; set; }
public virtual string To { get; set; }
public virtual string Remarks { get; set; }
public virtual Student EnrolledStudent { get; set; }
}
如果我使用上述所有代码,我会收到以下错误:
NHibernate.Exceptions.GenericADOException was caught
HResult=-2146232832 消息=无法插入:[EnrollmentSystem.Domain.StudentEducBckgrnd#6a0fdb25-18ad-4658-b8b3-e62b8d220649][SQL:INSERT INTO student_educ_bckgrnd(学校名称,备注,从,到,学生ID,ID)值(?,?,?, ?, ?, ?)] 来源=NHibernate SqlString=INSERT INTO student_educ_bckgrnd (school_name, comments, from, to, student_id, id) VALUES (?, ?, ?, ?, ?, ?) 堆栈跟踪: 在 NHibernate.Persister.Entity.AbstractEntityPersister.Insert(对象 id,对象 [] 字段,布尔 [] notNull,Int32 j,SqlCommandInfo sql,对象 obj,ISessionImplementor 会话) 在 NHibernate.Persister.Entity.AbstractEntityPersister.Insert(对象 id,对象 [] 字段,对象 obj,ISessionImplementor 会话) 在 NHibernate.Action.EntityInsertAction.Execute() 在 NHibernate.Engine.ActionQueue.Execute(IExecutable 可执行文件) 在 NHibernate.Engine.ActionQueue.ExecuteActions(IList 列表) 在 NHibernate.Engine.ActionQueue.ExecuteActions() 在 NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource 会话) 在 NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent 事件) 在 NHibernate.Impl.SessionImpl.Flush() 在 NHibernate.Transaction.AdoTransaction.Commit() 在 d:\Admiral\projects\EnrollmentSystem\EnrollmentSystem\Business\CStudent.cs:line 54 中的 EnrollmentSystem.Business.CStudent.SaveStudent(Student student, List`1 educationList) 内部异常:MySql.Data.MySqlClient.MySqlException H结果=-2147467259 Message=您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在 'from, to, student_id, id) VALUES ('fdsaf', 'asdf', '2014-01-28', '2014-01-28 ', '' 在第 1 行 来源=MySql.Data 错误代码=-2147467259 数量=1064 堆栈跟踪: 在 MySql.Data.MySqlClient.MySqlStream.ReadPacket() 在 MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& 影响行,Int64& 插入 ID) 在 MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId,Int32& 受影响的Rows,Int64& 插入的Id) 在 MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId,布尔力) 在 MySql.Data.MySqlClient.MySqlDataReader.NextResult() 在 MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior 行为) 在 MySql.Data.MySqlClient.MySqlCommand.ExecuteReader() 在 MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery() 在 NHibernate.AdoNet.AbstractBatcher.ExecuteNonQuery(IDbCommand cmd) 在 NHibernate.AdoNet.NonBatchingBatcher.AddToBatch(IExpectation 期望) 在 NHibernate.Persister.Entity.AbstractEntityPersister.Insert(对象 id,对象 [] 字段,布尔 [] notNull,Int32 j,SqlCommandInfo sql,对象 obj,ISessionImplementor 会话) 内部异常:
我正在使用 MySQL 并且正在构建一个 C# winforms 应用程序,该错误告诉我我遇到了 SQL 语法错误,但我无法弄清楚原因。
任何帮助将不胜感激。
NEWBIE
【问题讨论】:
标签: c# winforms nhibernate nhibernate-mapping