我有2个表分别容纳Office位置和计算机:tblLocation
和tblMachine
。这些表中的每一个都引用另一个。每个位置都有多台计算机(机器)。每个位置都可以向任何机器发送显示信息(无论位置如何)。一台机器可以是许多地方的显示机器。
我使用NHibernate作为ORM进行以下设置。
我的表格的简化示例:
tblLocation
列LocationId
(pk),LocationName
,DisplayMachineId
(fk)tblMachine
列MachineId
(pk),MachineName
,LocationId
(fk)我也有像这样的Location和Machine对象:
public class Location
{
public virtual int LocationId { get; set; }
public virtual string Name { get; set; }
public virtual Machine DisplayMachine { get; set; }
public virtual ISet<Machine> Machines { get; set; }
}
public class Machine
{
public virtual int MachineId { get; set; }
public virtual Location Location { get; set; }
public virtual ISet<Location> Locations { get; set; }
}
以下是每个的映射文件:
<class name="DataTransfer.Machine,DataTransfer" table="tblMachine">
<id name="MachineId" column="MachineID" type="Int32" unsaved-value="0">
<generator class="native"/>
</id>
<property name="Name" column="MachineName" type="string" not-null="true" />
<many-to-one name="Location" column="LocationID" not-null="false" class="DataTransfer.Location,DataTransfer" />
<set name="Locations" table="tblLocation" generic="true" inverse="true">
<key column="DisplayFromMachineID" />
<one-to-many class="DataTransfer.Location,DataTransfer"/>
</set>
<set name="MachineReportProperties" table="tblMachineReportProperty" generic="true" inverse="true">
<key column="MachineID" />
<one-to-many class="DataTransfer.MachineReportProperty,DataTransfer"/>
</set>
</class>
<class name="DataTransfer.Location,DataTransfer" table="tblLocation">
<id name="LocationId" column="LocationID" type="Int32" unsaved-value="0">
<generator class="native"/>
</id>
<property name="Name" column="LocationName" type="string" not-null="true" />
<many-to-one name="DisplayMachine" column="DisplayFromMachineID" not-null="false" class="DataTransfer.Machine,DataTransfer" />
<set name="Machines" table="tblMachine" generic="true" inverse="true">
<key column="LocationID" />
<one-to-many class="DataTransfer.Machine,DataTransfer"/>
</set>
</class>
我在尝试查询数据库时收到外键冲突。
我试图重新开始并重新创建映射和对象/属性,以为我可能错误地配置了它们。在这个设置中有没有明显的遗漏?我意识到最终答案可能是改变数据库结构,我只是想知道我是否遗漏了任何东西。
注意:当我将数据库中的关系从tblMachine.MachineId
(pk)移除到tblLocation.DisplayMachineId
时,fk违规就会消失。