我希望有人之前遇到过这个问题并且可以帮助我。在我的数据库中我使用表之间的关系
Ex:Authors,Author Books,Booksstore(salesDetails)
**Authors table**
=================
Aid int (Identity and Primarykey),AuthorName varchar(50)
=================
***********
**Author Books table**
=================
BookID int(primary key),BookName nvarchar(50),Aid int (foreign key Authorstable(Aid))
=================
**************
**Booksstore table**
================
StoreID int(primary key),Totalsales int,BookID int (foreign key Author Bookstable(BookID))
================
I'm using Nhibernate and mapping above tables in the following
*********************
**Authorsdao.hdm.xml**
*********************
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Dal" namespace="Dal">
<class name="AurthosDao,Dal" table="Aurthors Table" lazy="true">
<id name="AId" column="AuthorID" type="int">
<generator class="native" />
</id>
<property type="string" not-null="true" length="250" name="Authorname" column="AuthorName" />
</class>
</hibernate-mapping>
*********************
**Authorbooksdao.hdm.xml**
*********************
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Dal" namespace="Dal">
<class name="AurthorBooksDao,Dal" table="AuthorBookstable" lazy="true">
<id name="AId" column="AuthorID">
<generator class="foreign">
<param name="property">AId</param>
</generator>
</id>
<property type="int" not-null="true" name="BookId" column="BookID" />
<property type="string" not-null="true" name="Bookname" column="BookName" />
</class>
</hibernate-mapping>
*********************
**Booksstoredao.hdm.xml**
*********************
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Dal" namespace="Dal">
<class name="BookStoreDao,Dal" table="Bookstoretable" lazy="true">
<id name="BookId" column="BookID">
<generator class="foreign">
<param name="property">BookId</param>
</generator>
</id>
<property type="int" not-null="true" name="StoreId" column="StoreID" />
<property type="int" not-null="true" name="Totalsales" column="TotalSales" />
</class>
</hibernate-mapping>
***************************
Now I have to insert the data from Asp.Net Nhibernate in to 3 tables in one transaction.
1)I'm inserting first in Authors table after that I'm trying to get that last inserting key from Authors table and pushing into Authorsbook table
2)插入Autthorsbooks表后尝试从AuthorsBook表中获取最后一个插入的BookID并推入BookStore表。
如果有任何帮助,那将是值得赞赏的..
Radmin我在以下公共IAuthors Aurthorsdata(PlanningManagerProxy代理,String authorName,IBook书籍,Ilist,IList属性)中使用transcation { AuthorDao dao = new AuthorDao();
using (ITransaction tx = proxy.MarcomManager.GetTransaction())
{
// Business logic of AuthorObjective
dao.Name = authorName;
tx.PersistenceManager.PlanningRepository.Save<AuthorDao>(dao);
tx.Commit();
AuthorDao objList;
using (ITransaction txGet = proxy.GetTransaction())
{
objList = txGet.PersistenceManager.PlanningRepository.Get<AuthorDao>(id);
txGet.Commit();
}
var objId = from a in objList where a.AuthorID == authorId select a;
using (ITransaction tx2 = proxy.MarcomManager.GetTransaction())
{
AuthorbooksDao objdao = new AuthorbooksDao();
objdao.BookId = books.BookID;
objdao.BookName=books.BookName;
objdao.AuthorId= objId.AuthorId;
tx2.PersistenceManager.PlanningRepository.Save<AuthorbooksDao>(objdao);
tx2.Commit();
}
}
}
@Radim首先我提交了Authors的事务,然后从AuthorDao(AuthorsTable)获取最后一个插入的记录然后推入Bookstore表。但是在映射时间时外键不允许插入?
答案 0 :(得分:0)
让我们尝试这种映射(将您的表声明作为常量)。
C#类:
public class Author
{
public virtual int ID { get; set; }
public virtual string Authorname { get; set; }
}
public class Book
{
public virtual int ID { get; set; }
public virtual Author Author { get; set; }
public virtual string Bookname { get; set; }
}
public class BookStore
{
public virtual int ID { get; set; }
public virtual Book Book { get; set; }
}
xml mapping:
<class name="Author" table="Authors" lazy="true">
<id name="ID" column="Aid" type="int">
<generator class="native" />
</id>
<property type="string" not-null="true" length="250" name="Authorname" column="AuthorName" />
</class>
<class name="Book" table="AuthorBooks" lazy="true">
<id name="ID" column="BookID">
<generator class="native" />
</id>
<!-- reference Author -->
<many-to-one name="Author" column="AID" cascade="all" />
<property type="string" not-null="true" name="Bookname" column="BookName" />
</class>
<class name="BookStore" table="Bookstore" lazy="true">
<id name="ID" column="StoreID">
<generator class="native" />
</id>
<!-- reference Book -->
<many-to-one name="Book" column="BookID" cascade="all" />
<property type="int" not-null="true" name="Totalsales" column="TotalSales" />
</class>
以及如何创建作者,书籍和商店项目的代码 - 并将它们全部保留:
// instances creation
var author = new Author { Authorname = "my author" };
var book = new Book { Bookname = "my book "};
var store = new BookStore { TotalSales = 1 };
// references
book.Author = author;
store.Book = book;
// cascade all will store them all with correct ID
session.Save(author);
注意:在您的代码段中有一些不正确的内容,因此唯一的方法是在绿色字段上显示示例。例如。该文件应命名为... hbm.xml(而不是... hdm.xml,AurthosDao而不是AuthorsDao等。