После того, как мой последний вопрос был менее подробным, я пытаюсь точно объяснить, с какой проблемой я сталкиваюсь.
Сначала краткий обзор всех задействованных классов моделей:
public abstract class RecordBase
{
public int Id { get; set; }
}
public abstract class Record : RecordBase
{
public DateTime CreateDate { get; set; }
public int CreateUserId { get; set; }
public virtual User CreateUser { get; set; }
}
public class User : RecordBase
{
public string Username { get; set; }
}
public class Company : Record
{
public string CompanyName { get; set; }
public RecordReference FoundedByContact { get; set; }
}
public class Contact : Record
{
public string Firstname { get; set; }
public string Lastname { get; set; }
}
public class RecordReference
{
public int Id { get; set; }
public string Name { get; set; }
public virtual RecordBase Record { get; set; }
public RecordReference(RecordBase record)
{
Record = record;
Id = record.Id;
Name = record.ToString();
}
}
OnModelCreation
метод выглядит следующим образом:
mb.Conventions.Remove<PluralizingEntitySetNameConvention>();
mb.Conventions.Remove<PluralizingTableNameConvention>();
mb.Conventions.Add<MappingInheritedPropertiesSupportConvention>();
mb.Entity<RecordBase>().Property(r => r.Id).IsRequired().HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
mb.Entity<Contact>().Map(r => {
r.MapInheritedProperties();
r.ToTable("Contacts");
});
mb.Entity<Company>().Map(r =>
{
r.MapInheritedProperties();
r.ToTable("Companies");
});
mb.Entity<User>().Map(r =>
{
r.MapInheritedProperties();
r.ToTable("Users");
});
При построении сценария базы данных с Update-Database -Script
, таблица Companies
создается вместе с дополнительной таблицей RecordReference
:
CREATE TABLE [dbo].[Companies]
(
[Id] [INT] NOT NULL IDENTITY,
[FoundedByContact_Id] [INT],
[CreateDate] [DATETIME] NOT NULL,
[CreateUserId] [INT] NOT NULL,
[CompanyName] [NVARCHAR](MAX),
CONSTRAINT [PK_dbo.Companies] PRIMARY KEY ([Id])
)
CREATE TABLE [dbo].[RecordReference]
(
[Id] [INT] NOT NULL IDENTITY,
[Name] [NVARCHAR](MAX),
[Record_Id] [INT],
CONSTRAINT [PK_dbo.RecordReference] PRIMARY KEY ([Id])
)
Кроме того, есть несколько внешних ключей и т. Д., Которые мне не нужны таким образом.
Я хотел бы добиться в этом примере, что таблица Companies
получает двадополнительные поля, такие как FoundedByContact_Id
и FoundedByContact_Name
для хранения информации.
Таблица RecordReferences
не нужна для моих целей.
Кстати - я использую TPC, чтоТаблицы базы данных выглядят более «логичными», если их использовать для запросов напрямую.
С точки зрения программирования, конечно, я мог бы просто удалить все параметры наследования и не заботиться о дизайне таблицы.
В основном класс RecordReference
должен использоваться как«настраиваемый тип свойства» вместо создания 3 свойств в классе компании.
Идея состоит в том, чтобы упростить способ хранения имени ссылочных записей в среде, использующей DTO, с использованием Web Api и т. д., где указанная записьсам по себе не передается во всех случаях - но, по крайней мере, его имя должно быть доступно.
Надеюсь, на этот раз он описан настолько подробно, насколько это необходимо.
Спасибо за любой намек на решение по этому вопросу....
С уважением, Маркус