繁体   English   中英

实体框架TPC中的自有属性类型

[英]Own property type in Entity Framework TPC

在我的最后一个问题不太详细之后,我尝试确切地解释我所面临的问题。

首先,概述所有涉及的模型类:

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_IdFoundedByContact_Name来存储信息。

出于我的目的,不需要表RecordReferences

顺便说一句-我正在使用TPC,如果直接用于查询,数据库表看起来更“逻辑”。

从编程的角度来看,我当然可以删除所有继承设置,而不必关心表的设计。

基本上, RecordReference类应仅用作“自定义属性类型”,而不是在公司类中创建3个属性。

背后的想法是简化使用Web Api在使用DTO的环境中存储引用记录名称的方法,依此类推,并非在所有情况下都不会传输引用记录本身-但至少应提供其名称。

希望这次将按需要进行详细介绍。

感谢您提供解决方案的任何提示...

关于马库斯

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM