|
Hi, I am in the trouber of the error while the project trys to saving the data to child table. The error message
is shown below:
NHibernate.ADOException: could not insert: [ConsoleApplication1.user][SQL: INSERT INTO user (UNAME, NID) VALUES (?, ?)] --->
So confused that why it cannot get values to save. NHibernate I used is version 1.2. The code files are list below, please help me out here.
Thanks in advance.
app.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.2.0.4000,Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
</configSections>
<nhibernate>
<add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/>
<add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2005Dialect"/>
<add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver"/>
<add key="hibernate.connection.connection_string" value="Server=;initial catalog=;Persist Security Info=True;User ID=;Password="/>
</nhibernate>
</configuration>
user.hbm.xml:
<hibernate-mapping default-cascade="none" xmlns="urn:nhibernate-mapping-2.2">
<class name="ConsoleApplication1.user, ConsoleApplication1" table="user">
<id name="UID" type="System.Int32" column="UID" unsaved-value="0">
<generator class="native" />
</id>
<property name="UNAME" type="System.String" column="UNAME" not-null="false" />
<many-to-one name="Nationality" class="ConsoleApplication1.nationality, ConsoleApplication1" fetch="select" cascade="all">
<column name="NID" not-null="false" />
</many-to-one>
</class>
</hibernate-mapping>
user.hbm.cs:
namespace ConsoleApplication1 {
[System.SerializableAttribute()]
public class Abstractuser {
private int uID;
private string uNAME;
private ConsoleApplication1.nationality nationality;
public virtual int UID {
get {
return this.uID;
}
set {
this.uID = value;
}
}
public virtual string UNAME {
get {
return this.uNAME;
}
set {
this.uNAME = value;
}
}
public virtual ConsoleApplication1.nationality Nationality {
get {
return this.nationality;
}
set {
this.nationality = value;
}
}
}
[System.SerializableAttribute()]
public partial class user : Abstractuser {
}
}
nationality.hbm.xml:
<hibernate-mapping default-cascade="none" xmlns="urn:nhibernate-mapping-2.2">
<class name="ConsoleApplication1.nationality, ConsoleApplication1" table="nationality">
<id name="NID" type="System.Int32" column="NID" unsaved-value="0">
<generator class="native" />
</id>
<property name="NATIONALITY" type="System.String" column="NATIONALITY" not-null="false" />
<bag name="User" inverse="true" lazy="true" cascade="all">
<key>
<column name="NID" not-null="false" />
</key>
<one-to-many class="ConsoleApplication1.user, ConsoleApplication1" />
</bag>
</class>
</hibernate-mapping>
nationality.hbm.cs:
namespace ConsoleApplication1 {
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlIncludeAttribute(typeof(ConsoleApplication1.user))]
[System.Xml.Serialization.SoapIncludeAttribute(typeof(ConsoleApplication1.user))]
public class Abstractnationality {
private int nID;
private string nATIONALITY;
private System.Collections.IList user;
public virtual int NID {
get {
return this.nID;
}
set {
this.nID = value;
}
}
public virtual string NATIONALITY {
get {
return this.nATIONALITY;
}
set {
this.nATIONALITY = value;
}
}
public virtual System.Collections.IList User {
get {
return this.user;
}
set {
this.user = value;
}
}
}
[System.SerializableAttribute()]
public partial class nationality : Abstractnationality {
}
}
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
NHibernate.Cfg.Configuration cfg = new NHibernate.Cfg.Configuration();
cfg.AddAssembly("ConsoleApplication1");
ISessionFactory factory = cfg.BuildSessionFactory();
ISession session = factory.OpenSession();
ITransaction transaction = session.BeginTransaction();
nationality nat = (nationality)session.Get(typeof(nationality), 1);
user u = new user();
u.UNAME = "Pall";
u.Nationality = nat;
nat.User.Add(u);
try
{
if (!session.IsConnected)
{
session.Reconnect();
}
session.Save(u); // Error occured at this line!!
transaction.Commit();
session.Close();
}
catch (Exception e)
{
string s = e.ToString();
}
}
}
}
|
|
|
|
|
yeah, i see the horror in this
(yes|no|maybe)*
|
|
|
|
|
Harry Sun wrote: Hi, I am in the trouber of the error while the project trys to saving the data to child table. The error message
is shown below:
You've hit the "Y Who Cares" Bug. It's much less advertised than the Y2K bug was, but much more prevalent. Can you feel the apathy? Can you?
|
|
|
|
|
Pete O'Hanlon wrote: You've hit the "Y Who Cares" Bug.
Hopefully said bug causes his system to overload, and a rm -rf /his/job/ must be preformed.
I'm going to become rich when I create a device that allows me to punch people in the face over the internet.
"If an Indian asked a programming question in the forest, would it still be urgent?" - John Simmons / outlaw programmer
|
|
|
|
|
First, you post the same question 3 times, and in different fourms as well. Well call that second, the cross-posting that is. Third, you don't know how to use a debugger. Fourth, you put 'help!' in your subject. Everyone that posts a question needs help, jackass. Fifth, you can't read the forum rules. This isn't for questions. It's for coding horrors, which yours is, but in a different context.
So basically, that makes you a 5x idiot. Quit crop-dusting our forums with your crap question. No one cares. Had you been civilized about it, you may have gotten some help. As a matter of fact, someone did answer you. They now wish they didn't, and I'm sure they wouldn't have if they'd seen your blatant disregard for the rules. Most people won't. Oh man I wish my device was ready.
I'm going to become rich when I create a device that allows me to punch people in the face over the internet.
"If an Indian asked a programming question in the forest, would it still be urgent?" - John Simmons / outlaw programmer
|
|
|
|
|
Nice
|
|
|
|
|
the dog and His Masters Voice.
Luc Pattyn [Forum Guidelines] [My Articles]
This month's tips:
- before you ask a question here, search CodeProject, then Google;
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get;
- use PRE tags to preserve formatting when showing multi-line code snippets.
|
|
|
|
|
|
I took the lesson. Thank you.
|
|
|
|
|
I feel nice today, so I will help you once here, thats it though, next time, try the correct forum.
Harry Sun wrote: unsaved-value="0"
That seems like bogus.
|
|
|
|
|
Thanks for your kind. I removed that code you mentioned, but the problem still exists. In fact, I thought it is fine for define unsaved-value="0", because I have already make this attribute as incremental identiy in database. While debugging the code, the object which I intend to save in session.save(u) does have correct values. And it works fine if I just work with one table. Am I right? Please tell me if you got time.
|
|
|
|
|
You can't use user as a table name and have it work with NHibernate unless you do some special stuff in your mapping file...
In your user.hbm.xml do this:
//note the square brackets around the table name.
<class name="ConsoleApplication1.user, ConsoleApplication1" table="[user]">
That'll fix your problem...
Richard
http://www.BellaDev.net
|
|
|
|
|
Please check "Ignore HTML tags in this message" or do something about that <class..., it's not showing up
[ My Blog] "Visual studio desperately needs some performance improvements. It is sometimes almost as slow as eclipse." - Rüdiger Klaehn "Real men use mspaint for writing code and notepad for designing graphics." - Anna-Jayne Metcalfe
|
|
|
|
|
Dear Richard,
That is what the problem is. I really appreciate to what you did. It has been tough time for me. You saved me. Thank you again.
Harry
|
|
|
|
|
I learned from a senior system's analyst today that you should never pass a class you created back from a webservice. Since he was wanting to pass a dataset back and also the exception message if one occurred, he decided it was better to send back an empty dataset and have the webservice write a file to the users machine if it generated an error! Why couldn't I think of that!!!
|
|
|
|
|
jchigg2000 wrote: a senior system's analyst
I assume you mean that he was just old or out of touch. Why on earth does he think you can't pass a class back? More importantly, why's he passing a DataSet back? DataSets are really bad practice when you're developing a web service - they are bloated and not interoperable with other platforms without extra development effort. Mind you, there are so many WTFs in his solution that I can't begin to allude to the horror in it.
|
|
|
|
|
Pete O'Hanlon wrote: there are so many WTFs in his solution that I can't begin to allude to the horror in it
I ditto that.
"I guess it's what separates the professionals from the drag and drop, girly wirly, namby pamby, wishy washy, can't code for crap types." - Pete O'Hanlon
|
|
|
|
|
jchigg2000 wrote: a senior system's analyst
He might be a senior system analyst just by virtue of his experience in date and time calendar. But adjudging him through his wise (pros) and vices (cons) in programming, he should truly be classified as a junior most crap .
Vasudevan Deepak Kumar
Personal Homepage Tech Gossips
A pessimist sees only the dark side of the clouds, and mopes; a philosopher sees both sides, and shrugs; an optimist doesn't see the clouds at all - he's walking on them. --Leonard Louis Levinson
|
|
|
|
|
Hello folks!
I did a little spy-out (with Reflector(c)) the DataView-Class. And found the following:
public IEnumerator GetEnumerator()
{
DataRowView[] array = new DataRowView[this.Count];
this.CopyTo(array, 0);
return array.GetEnumerator();
}
Do I understand right: Each foreach-Initialisation it will copy all its Content to a new array, and return that arrays Enumerator??
And if I break the foreach-loop at second element all these DataRowViews came into live in vain?
|
|
|
|
|
Yeah, must be some old code.
Try not to use foreach if you expect to break the iteration.
|
|
|
|
|
PIEBALDconsult wrote: Try not to use foreach if you expect to break the iteration.
Thats the first time I hear this advice. It results in some little pretty ugly workarounds, doesn't it?
No - I expect the coders to make their enumerators efficient and keep on enjoing the better design of foreach (if available).
|
|
|
|
|
Actually, it's the result of one of the tenets of iteration development. If you have to use a break statement (or god forbid a goto) to get out of a loop, you are using the wrong type of loop. Have a look at Code Complete by Steve McConnell to find more gems like this.
|
|
|
|
|
Hm, I'm real puzzled. Whenever I was searching anything in any Enumerable I used foreach. And broke the loop when I did find, what I wanted.
Sample - how you would improve this little thing?
public TreeNode GetNodeByText(TreeNode Parent, string Txt) {
foreach (TreeNode Nd in Parent.Nodes) {
if (Nd.Text == Txt) return Nd;
}
return null;
}
And how do you think is ICollection<T>.Contains() implemented in hundreds of classes?
Steve McConnells Code Complete Loop - Chapter seems not to be available (for free, I mean).
modified on Friday, January 25, 2008 5:28:44 PM
|
|
|
|
|
Well, try not to, but some times you may need to.
Having said that, you may be able to iterate with the index of the nodes.
Or, if you do more searching than adding/removing, you could use a Dictionary<string,TreeNode> to speed up the search.
|
|
|
|
|
So - if somebody else writes bad code you think it's your duty to also write bad code? Just because somebody gives you a foreach doesn't mean that you have to use it in every case. Take a look at the alternatives such as the do/while loop.
Mr.PoorEnglish wrote: Steve McConnells Code Complete Loop - Chapter seems not to be available (for free, I mean).
So do what others do and buy a copy of the book. You won't regret it.
|
|
|
|