с использованием 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 (?,?);
Я не хочу, чтобы это делалось, скорее я надеялся, что отображение сначала вставит Продукты, а затем - конфигурацию, а ProductId
будет вставлено в таблицу конфигурации.
Я выдернул свои волосы, пытаясь переопределить и читать ссылки, такие как this и this , но все еще не могу заставить его делать то, что я хочу. Я работаю с существующими данными и кодом , поэтому я бы не стал изменять определения таблиц базы данных или объект домена. Здесь происходит нечто большее, чем то, что рисует этот пример, поэтому, если бы мы могли избежать дискуссий о разработке модели предметной области, это было бы здорово. У меня есть ссылка на шип этого проекта здесь (предполагается, что база данных существует)
мои текущие текущие отображения:
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);
}
}