繁体   English   中英

首先C#数据库:引用自己表的列问题

[英]C# Database first : Referencing own table's column issue

抱歉,标题难以理解。

通常,这就是我在做什么:

  • 添加一个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 "";
        }
    }
}

好吧,现在我在VourcherHeader类中有了VourcherType.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 "";
        }
    }
}

任何帮助是极大的赞赏 !

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

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

VoucherHeader1用于VoucheHeader的集合,因为此特定实体可以是许多其他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)中检查正确的属性名称。

暂无
暂无

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

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