c#数据库优先:引用自己的表's列问题

本文关键字:问题 自己的 数据库 引用 | 更新日期: 2023-09-27 18:14:37

很抱歉,这个标题太难懂了。

通常情况下,我是这样做的:

    添加一个ADO。. NET实体数据模型(包括外键)
  • 表现在自动生成类在我的项目

现在我遇到了这个问题,说我有两个表:

CREATE TABLE [VoucherType]
(
    [ID] nvarchar(10) not null Constraint [PK_VoucherType] Primary Key Clustered , 
    [VNName] nvarchar(50) default '' not null, 
    [ENName] nvarchar(50) default '' not null, 
    [Rowver] [TIMESTAMP] not null
)
CREATE TABLE dbo.[VoucherHeader]
(   
    [ID] INT IDENTITY(1,1) Constraint [PK_VoucherHeader] Primary Key Clustered , -- PRIMARY 
    [DateCreated] datetime not null,
    [Description] nvarchar (512) default '' not NULL ,      
    [VoucherTypeID] nvarchar(10) null
        Constraint [FK_VoucherHeader_VoucherTypeID] Foreign Key (VoucherTypeID) References dbo.VoucherType(ID)
)
现在,在我的代码中,我添加了一个部分类VoucherHeader,我的目标是添加一个名为VoucherTypeName的新属性,它来自VoucherType表:
public partial class VoucherHeader
{
    [DataMember]
    public string VoucherTypeName
    {
        set { }
        get
        {
            if (VoucherType != null) return VoucherType.ENName;
            else return "";
        }
    }
}

现在我有了VourcherType。VourcherHeader类中的ENName

但是如果我在VoucherHeader表中添加一个新列,它将引用它自己的列:

alter table voucherheader add
    [RelatedID] [int] null 
            Constraint [FK_VoucherHeader_RelatedID] Foreign Key (RelatedID) References dbo.VoucherHeader(ID)

这行不通:

public partial class VoucherHeader
{
    [DataMember]
    public string RelatedDescription
    {
        set { }
        get
        {
            if (VoucherHeader != null) return VoucherHeader.Description;
            else return "";
        }
    }
}

任何帮助都非常感谢!

c#数据库优先:引用自己的表's列问题

如果您使用数据库优先的方法,您只需要在更改VoucherHeader表之后从数据库更新您的模型。

这可能会导致出现两个额外的导航属性:VoucherHeader1和VoucherHeader2。

VoucherHeader1是一个VoucheHeaders的集合,因为这个特定的实体可以成为许多其他VoucherHeader实体的目标。

VoucherHeader2将是RelatedID引用的相关实体。因此,在你的代码中,你需要引用这个实体的描述:

public partial class VoucherHeader
{
    [DataMember]
    public string RelatedDescription
    {
        set { }
        get
        {
            if (VoucherHeader2 != null) return VoucherHeader2.Description;
            else return "";
        }
    }
}

您可以在生成的实体类(model.tt下的VoucherHeader.cs)中检查正确的属性名称。