Sql NHibernate多对一关系
我们有以下域对象:-Sql NHibernate多对一关系,sql,nhibernate,fluent-nhibernate,nhibernate-mapping,fluent-nhibernate-mapping,Sql,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,Fluent Nhibernate Mapping,我们有以下域对象:- public class UserDevice : BaseObject { // different properties to hold data } public class DeviceRecipient:BaseObject { public virtual UserDevice LastAttemptedDevice{get;set;} } 因此,使用fluent nhibernate automapper基于此创建的sql模式如下 DeviceRecip
public class UserDevice : BaseObject
{
// different properties to hold data
}
public class DeviceRecipient:BaseObject
{
public virtual UserDevice LastAttemptedDevice{get;set;}
}
因此,使用fluent nhibernate automapper基于此创建的sql模式如下
DeviceRecipient的表将UserDevice的主键作为外键,即UserDevice\u Id
现在,当我们尝试删除UserDevice对象时,它为外键约束提供了一个sql异常。我们要做的是:-
任何帮助都是值得的。。提前谢谢 正如我所见,你有单向多对一关系。因此,首先您必须编写以下覆盖:
public class DeviceRecipientOverride : IAutoMappingOverride<DeviceRecipient>
{
public void Override(AutoMapping<DeviceRecipient> mapping)
{
mapping.References(x => x.LastAttemptedDevice)
.NotFound.Ignore(); // this doing what you want.
}
}
编辑:
从NHibernate参考
找不到(可选-默认为异常):指定外部
将处理引用缺少行的键:忽略将处理
缺少作为空关联的行
因此,当您设置notfound=“ignore”
SchemaExport/SchemaUpdate时,将不会为您创建FK。因此,如果您拥有FK,则需要将其删除或将FK的OnDelete行为设置为set Null
。假设您正在使用Microsoft Sql Server:
ALTER TABLE [DeviceRecipient]
ADD CONSTRAINT [FK_DeviceRecipient_LastAttemptedDevice]
FOREIGN KEY ([LastAttemptedDevice_ID])
REFERENCES [UserDevice]
ON DELETE SET NULL
正如我所见,你有单向多对一关系。因此,首先您必须编写以下覆盖:
public class DeviceRecipientOverride : IAutoMappingOverride<DeviceRecipient>
{
public void Override(AutoMapping<DeviceRecipient> mapping)
{
mapping.References(x => x.LastAttemptedDevice)
.NotFound.Ignore(); // this doing what you want.
}
}
编辑:
从NHibernate参考
找不到(可选-默认为异常):指定外部
将处理引用缺少行的键:忽略将处理
缺少作为空关联的行
因此,当您设置notfound=“ignore”
SchemaExport/SchemaUpdate时,将不会为您创建FK。因此,如果您拥有FK,则需要将其删除或将FK的OnDelete行为设置为set Null
。假设您正在使用Microsoft Sql Server:
ALTER TABLE [DeviceRecipient]
ADD CONSTRAINT [FK_DeviceRecipient_LastAttemptedDevice]
FOREIGN KEY ([LastAttemptedDevice_ID])
REFERENCES [UserDevice]
ON DELETE SET NULL
更正:-这不是一对一的关系..更正:-这不是一对一的关系..我两个都试过..但问题仍然存在。。我签入了数据库,外键允许为NULL。我还需要做其他检查吗?好的,我会看一看,但是当使用
notfound=“ignore”
时,SchemaExport/SchemaUpdate可能不会创建FK。我将更深入地了解..是的..将FK的OnDelete行为设置为Set NULL worked。。!我两个都试过了,但问题仍然存在。。我签入了数据库,外键允许为NULL。我还需要做其他检查吗?好的,我会看一看,但是当使用notfound=“ignore”
时,SchemaExport/SchemaUpdate可能不会创建FK。我将更深入地了解..是的..将FK的OnDelete行为设置为Set NULL worked。。!