устаревшая база данных: многие-к-одному / ссылки без всех необходимых ключевых столбцов - PullRequest
0 голосов
/ 25 марта 2011

У меня есть класс, ссылающийся на (шаблон) текст, который имеет для каждого арендатора и каждого варианта использования несколько возможных текстов

class Class1
{
    [...]
    public virtual Text TitleName { get; set; }
}

class Text
{
    public virtual int TenantId { get; set; }
    public virtual string Key { get; set; }
    public virtual int Number { get; set; }
    public virtual string Value { get; set; }
}

К сожалению, структура таблицы выглядит как

Table Class1
    ...
    textnumber int,

Table Text
    tenant int,
    key varchar (10),
    number int,
pkey(tenant, key, number);

, поскольку Class1всегда ссылается на tenant = 0 (все арендаторы) и key = "class1text"

Редактировать: мне нужно. Где (), но References () имеет только HasMany ()

Что у меня естьдо сих пор:

public void TextMap : ClassMap<Text>
{
    public TextMap()
    {
       Table("restexts");

       CompositeId()
           .KeyProperty(t => t.TenantId, "tenant")
           .KeyProperty(t => t.Key, "name")
           .KeyProperty(t => t.Number, "number");

       Map(t => t.Value, "content");
    }
}

public void Class1Map : ClassMap<Class1>
{
    public TextMap()
    {
       // mapping rest

       References(c => c.TitleName)
           .Columns("textnumber", ??, ??);  // column 2 and 3 missing, because always the same
    }
}

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 26 мая 2011

не хватает времени, я сопоставил его как Map(c => c.TitleNameId, "textnumber"); и должен помнить имя владельца и ключа каждый раз, когда мне нужно имя заголовка (которое использует магические значения: (

0 голосов
/ 25 марта 2011

вы можете сопоставить свои классы таким образом с FluentNHibernate, это обходной путь для сопоставления только одного поля в отношении OneToMany.

public Class1()
{
 Table("TableName");
 Id(x => x.MyId).Column("TableId");
 .
 .
 .
 HasMany<TextModel>(x => x.textnumber).KeyColumn("TableField");
}

public Text()
{
 Table("TableName");
 Id(x => x.MyId).Column("TableId");
 .
 .
 .
 References<Class1Model>(x => x.number,"TableColumn");
}

Затем вы можете добавить в свой запрос фильтры для других полей (tenent= 0 и ключ = "class1text")

Я надеюсь, что это полезно

...