Ich habe eine Companies-Tabelle einer Company-Klasse zugeordnet und eine Websites-Tabelle einer Website-Klasse zugeordnet. Mein Unternehmen Tabelle ist im Grunde nicht bewegen, aber ich versuche, eine neue Website-Datensatz mit dem folgende einfügen:NHibernate fügt neuen Datensatz mit einer Null-Viele-zu-Eins-Zuordnung ein
var website = new Website
{
Active = true,
SiteRoot = "example.com",
CompanyId = 100
};
var repo = new WebsiteRepository();
repo.Add(website);
Die Website-Klasse hat eine Eigenschaft, die CompanyID, was in den Unternehmen auf die ID-Spalte ist abbildet zurück Tabelle, aber da die Website-Klasse eine Viele-zu-Eins-Zuordnung hat, versucht sie, die website.Company.Id
-Eigenschaft in die Tabelle (die null ist) einzufügen, anstatt die website.Id
-Eigenschaft zu übernehmen.
Es sind keine Fremdschlüssel beteiligt, da die Tabellen in 2 separaten Datenbanken enthalten sind.
Dies ist der Fehler Ich erhalte:
NHibernate.Exceptions.GenericADOException: nicht einsetzen konnte: [Models.Website] [SQL: INSERT INTO Database1.dbo.Websites (CompanyID, siteRoot, Aktiv) WERTE (?,?,?); select SCOPE_IDENTITY()] ---> System.Data.SqlClient.SqlException: Der Wert NULL kann nicht in die Spalte 'CompanyID' eingefügt werden, Tabelle 'Database1.dbo.Websites'; Spalte erlaubt keine Nullen. INSERT schlägt fehl.
NHibernate: INSERT IN Datenbank1.dbo.Websites (CompanyID, SiteRoot, Active) VALUES (@ p0, @ p1, @ p2); Wählen Sie SCOPE_IDENTITY(); @ p0 = NULL [Typ: Int32 (0)], @ p1 = 'example.com' [Typ: String (4000)], @ p2 = True [Typ: Boolean (0)]
Hier sind die Zuordnungen:
<hibernate-mapping assembly="Models" namespace="Models" xmlns="urn:nhibernate-mapping-2.2" schema="Database1.dbo">
<class name="Website" table="Websites" lazy="true" >
<id name="Id" column="ID">
<generator class="identity" />
</id>
<many-to-one name="Company" column="CompanyID" fetch="join"/>
<property name="SiteRoot">
<column name="SiteRoot" sql-type="nvarchar" length="50" not-null="false" />
</property>
<property name="Active">
<column name="Active" sql-type="bit" not-null="true" />
</property>
</class>
</hibernate-mapping>
<hibernate-mapping assembly="Models" namespace="Models" xmlns="urn:nhibernate-mapping-2.2" schema="Database2.dbo">
<class name="Company" table="Companies" lazy="true" >
<id name="Id" column="ID">
<generator class="identity" />
</id>
<property name="CompanyId">
<column name="CompanyID" sql-type="int" not-null="true" />
</property>
<property name="CompanyName">
<column name="CompanyName" sql-type="nchar" not-null="false" />
</property>
<set name="Websites" table="Websites" schema="Database1.dbo" lazy="false">
<key column="CID"/>
<one-to-many class="Models.Website, Models" />
</set>
</class>
</hibernate-mapping>
posten Sie Ihre Mappings ... – DanielVorph
@DanielVorph Frage aktualisiert, um Zuordnungen – Siada
Webseite Klasse CompanyID Eigenschaft mit int-Typ ich denke, so in Ihrem Mapping Sie CompanyID mit Typ-Unternehmen haben, müssen CompanyID Eigenschaft Unternehmensart sein statt von Int-Typ – DanielVorph