【发布时间】:2012-02-03 22:13:39
【问题描述】:
使用 FluentNhibernate;
我正在尝试坚持一个看似简单的对象模型:
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public Config Config { get; set; }
}
public class Config
{
public int ConfigId { get; set; }
public int ProductId { get; set; }
public string ConfigField1 { get; set; }
public string ConfigField2 { get; set; }
}
数据库看起来像:(语法不正确)
CREATE TABLE [dbo].[Products](
[ProductId] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](50) NULL
)
CREATE TABLE [dbo].[Config](
[ConfigId] [int] IDENTITY(1,1) NOT NULL,
[ProductId] [int] NOT NULL,
[ConfigField1] [varchar](50) NULL,
[ConfigField2] [varchar](50) NULL
) ON [PRIMARY]
开箱即用的 fluent-nhibernate 将尝试将其映射为 Products 表上的外键,例如:
INSERT INTO Products (Name, Config_id) VALUES (?, ?);
我不希望它这样做,而是希望映射先插入 Products,然后再插入配置,并将 ProductId 插入到配置表中。
我已经尝试过覆盖和阅读链接,例如this 和this,但仍然无法让它做我想做的事。我正在使用现有数据和代码,因此我宁愿不更改数据库表定义或域对象。除了这个例子所描绘的内容之外,还有更多的事情发生,所以如果我们可以避免讨论领域模型设计,那就太好了。我有一个链接到这个项目的一个高峰here(假设数据库存在)
我目前的流利映射是:
public class ProductOverrides : IAutoMappingOverride<Product>
{
public void Override(AutoMapping<Product> mapping)
{
mapping.Id(x => x.Id).Column("ProductId");
mapping.Table("Products");
}
}
public class ConfigOverrides : IAutoMappingOverride<Config>
{
public void Override(AutoMapping<Config> mapping)
{
mapping.Id(x => x.ConfigId);
}
}
【问题讨论】:
-
你试过了吗? brunoreis.com/tech/…
-
你能解释一下这有什么帮助吗?这是一对一的关系,这不是我需要的,因为
Config有自己的主键ConfigId,但需要通过ProductId链接回产品
标签: c# nhibernate fluent-nhibernate