Hallo,
ich hab (schon wieder) ein DB-Problem. Ich arbeite zum ersten Mal mit OR-Datenbanken und habe mir dieses Tutorial angesehen. Eine "normale" Abfrage über MySQL funktioniert, aber über Hibernate bekomme ich eine leere Liste zurück.
Mir ist außerdem aufgefallen:
Wenn ich in der .hbm.xml den class name auf "MessageProvider" setze, motzt er, dass MessageProvider nicht gemappt wäre. Mit "TheData.MessageProvider" gibts keine Probleme. Bei den Propertys kann ich allerdings eintragen, was ich will, ohne dass sich was ändert. Er scheint also zwar zu merken, dass das Mapping existiert, arbeitet aber nicht damit :-/
Gegoogelt habe ich auch, die Lösung ist hier aber in der Regel, den Build-Mode auf "Embedded" zu setzen, was ich bereits habe.
Im Tutorial soll auch der Connector installiert werden. Die Dateien unter C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.5\Assemblies\v4.5 sind zumindest bei mir identisch mit denen, die ich über NuGet hinzugefügt habe.
Das sind alle Dateien, in denen ich was geändert habe:
ich hab (schon wieder) ein DB-Problem. Ich arbeite zum ersten Mal mit OR-Datenbanken und habe mir dieses Tutorial angesehen. Eine "normale" Abfrage über MySQL funktioniert, aber über Hibernate bekomme ich eine leere Liste zurück.
Mir ist außerdem aufgefallen:
Wenn ich in der .hbm.xml den class name auf "MessageProvider" setze, motzt er, dass MessageProvider nicht gemappt wäre. Mit "TheData.MessageProvider" gibts keine Probleme. Bei den Propertys kann ich allerdings eintragen, was ich will, ohne dass sich was ändert. Er scheint also zwar zu merken, dass das Mapping existiert, arbeitet aber nicht damit :-/
Gegoogelt habe ich auch, die Lösung ist hier aber in der Regel, den Build-Mode auf "Embedded" zu setzen, was ich bereits habe.
Im Tutorial soll auch der Connector installiert werden. Die Dateien unter C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.5\Assemblies\v4.5 sind zumindest bei mir identisch mit denen, die ich über NuGet hinzugefügt habe.
Das sind alle Dateien, in denen ich was geändert habe:
Code:
namespace NHibernate
{
class Program
{
private static void MySQLQuery()
{
string connString = "Server=localhost;database=nhibernate_test;uid=root";
MySqlConnection connection = new MySqlConnection(connString);
connection.Open();
string command = "SELECT * FROM helloworld";
try
{
MySqlDataReader reader = new MySqlCommand(command, connection).ExecuteReader();
while (reader.Read())
{
Console.WriteLine(reader.GetString("Message"));
}
}
catch (Exception e) {
Console.WriteLine(e.Message);
}
finally
{
connection.Close();
}
}
private static void NHibernateQuery()
{
Configuration config = new Configuration();
config.SetProperty(NHibernate.Cfg.Environment.ConnectionProvider, "NHibernate.Connection.DriverConnectionProvider");
config.SetProperty(NHibernate.Cfg.Environment.Dialect, "NHibernate.Dialect.MySQLDialect");
config.SetProperty(NHibernate.Cfg.Environment.ConnectionDriver, "NHibernate.Driver.MySqlDataDriver");
config.SetProperty(NHibernate.Cfg.Environment.ConnectionString, "server=localhost;database=nhibernate_test;uid=root");
config.AddAssembly("NHibernate");
ISessionFactory factory;
factory = config.BuildSessionFactory();
ISession session = null;
IList messages = null;
try
{
session = factory.OpenSession();
messages = session.CreateCriteria(typeof(MessageProvider)).List();
//IQuery query = session.CreateQuery("FROM TheData.MessageProvider");
Console.WriteLine("NofMessages:{0}\n", messages.Count);
foreach (TheData.MessageProvider aMessage in messages)
{
Console.WriteLine("Id:{0} - Message:{1}", aMessage.Id, aMessage.Message);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
session.Close();
}
Console.Read();
}
static void Main(string[] args)
{
MySQLQuery();
NHibernateQuery();
}
}
}
Code:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="TheData.MessageProvider, NHibernate" table="helloworld">
<id name="Id">
<generator class="identity" />
</id>
<property name="Message"/>
</class>
</hibernate-mapping>
Code:
namespace TheData
{
public class MessageProvider
{
public MessageProvider()
{
}
public virtual int Id { get; set; }
public virtual string Message { get; set; }
}
}
Zuletzt bearbeitet: