Fluent nhibernate 有两个ContentTypeRecords相互了解
考虑我需要ProductPartRecord类型和ManufacturerPartRecord类型的情况。 在第一种类型中,我需要知道谁是此部件的制造商,因此使用ManufacturerPartRecord类型的属性会很方便。 在第二种类型中,我想知道该制造商生产的产品,因此拥有IList类型的属性是很方便的 显然,这是一种1对多的关系。Fluent nhibernate 有两个ContentTypeRecords相互了解,fluent-nhibernate,orchardcms,Fluent Nhibernate,Orchardcms,考虑我需要ProductPartRecord类型和ManufacturerPartRecord类型的情况。 在第一种类型中,我需要知道谁是此部件的制造商,因此使用ManufacturerPartRecord类型的属性会很方便。 在第二种类型中,我想知道该制造商生产的产品,因此拥有IList类型的属性是很方便的 显然,这是一种1对多的关系。 将记录放入记录中是一种不好的做法吗?这是否可能,因为我在实现它时遇到了困难?这是可能的。下面是如何做到这一点: 在迁移中,向ProductPartRecord
将记录放入记录中是一种不好的做法吗?这是否可能,因为我在实现它时遇到了困难?这是可能的。下面是如何做到这一点:
ProductPartRecord
添加一列,该列的类型为int
,名称应为ManufacturerPartRecord\u Id
,假设Id
是ManufacturerPartRecord
表中主键的名称schemabilder.CreateForeignKey(“产品制造商”,“产品零件记录”,新[]{“制造商零件记录”\u Id},“制造商零件记录”,新[]{“Id”})代码>
ManufacturerPartRecord
model类中,您应该添加一个新属性,用于产品列表-public virtual IList ProductPartRecords{get;set;}
ProductPartRecord
model类中,您应该添加一个新属性,用于获取manufacturer-公共虚拟ManufacturerPartRecord ManufacturerPartRecord{get;set;}
如果您不希望这种情况自动发生,您应该创建一个服务类,该类将通过构造函数注入获取
IRepository
或IRepository
,并自己处理获取和保存列表。这是可能的。下面是如何做到这一点:
ProductPartRecord
添加一列,该列的类型为int
,名称应为ManufacturerPartRecord\u Id
,假设Id
是ManufacturerPartRecord
表中主键的名称schemabilder.CreateForeignKey(“产品制造商”,“产品零件记录”,新[]{“制造商零件记录”\u Id},“制造商零件记录”,新[]{“Id”})代码>
ManufacturerPartRecord
model类中,您应该添加一个新属性,用于产品列表-public virtual IList ProductPartRecords{get;set;}
ProductPartRecord
model类中,您应该添加一个新属性,用于获取manufacturer-公共虚拟ManufacturerPartRecord ManufacturerPartRecord{get;set;}
如果您不希望这种情况自动发生,您应该创建一个服务类,该类将通过构造函数注入获取
IRepository
或IRepository
,并自己处理获取和保存列表。这是非常有说明性的。我还有一个问题。最后一段是否替换步骤“2”,或者必须以任何方式创建外键。我这样问是因为在我看到的pluralsight的Advanced Orchard课程中,关系是在没有fk的情况下创建的,而不是一个包含两个记录ID的表(对于ref,请参见repo中的UpdateFrom5()),它是可选的。如果创建外键,它将在数据库中创建,数据库本身将强制执行它,这意味着如果您尝试向某些产品添加尚不存在的ManufacturerId,或者尝试删除某些产品仍在使用其ID的制造商,它将抛出错误。因此,现在,在编辑产品时,我在视图中显示制造商名称列表。我选择其中一个制造商,然后请求像往常一样转到产品驱动程序,在那里,我无法将我选择的名称(字符串)分配给ProductPart的制造商(ManufacturerPartRecord)属性。我想使用制造商存储库按我选择的名称查找记录。但是,我不知道如何从ProductDriver.Editor()方法访问该名称。这取决于是自动连接部件还是自己处理。无论采用哪种路径,在显示制造商名称列表时,都应将其Id设置为列表项的值,如果使用自动零件连接,则应将选择列表的名称设置为例如@Html.FieldNameFor(m=>m.ManufacturerPartRecord.Id),或者例如@Html.FieldNameFor(m=>m.ManufacturerPartRecordId)如果您使用的是手动连接。之后,调用updater.TryUpdateModel()后,应该设置id属性。之后,可以创建驱动程序的构造函数,该构造函数接受类型为IRepository
的参数,并将值保存到某个字段(例如:private readonly IRepository\u repository;
)。创建该字段后,可以在更新程序.TryUpdateModel()之后使用存储库,如下所示:part.ManufacturerPartRecord=\u repository.Get(part.ManufacturerPartRecordId)代码>这是非常解释性的。我还有一个问题。最后一段是否替换步骤“2”,或者必须以任何方式创建外键。我这样问是因为在我看到的pluralsight的Advanced Orchard课程中,关系是在没有fk的情况下创建的,而不是一个包含两个记录ID的表(对于ref,请参见repo中的UpdateFrom5()),它是可选的。如果创建外键,它将在数据库内部创建,数据库本身将强制执行它,这意味着如果您尝试添加ManufacturerId,它将抛出错误