1

我正在尝试将属性添加到 Entity Framework 为我创建的生成数据类之一。我在另一个生成的类上做了完全相同的事情,没有问题,由于某种原因,它在这个类上不起作用。

两个生成的对象之间的唯一区别是一个只是一个直接的表映射(一个有效的),另一个继承自另一个对象(一个不工作的)。换句话说,一个表代表两个实体,并且基于一些标准,我将它抽象出来并创建了两个继承实体......

<EntityType Name="Product" Abstract="true">
    <Key>
        <PropertyRef Name="Id" />
    </Key>
    <Property Name="Id" Type="String" Nullable="false" />
</EntityType>
<EntityType Name="Key" BaseType="MyEntities.Product">
    <Property Name="Status" Type="String" Nullable="true" />
    <Property Name="SerialNumberString" Type="String" Nullable="true" />
</EntityType>
<EntityType Name="License" BaseType="MyEntities.Product" >
    <Property Name="ProductCode" Type="String" Nullable="true" />
    <Property Name="Version" Type="String" Nullable="true" />
</EntityType>

然后我在下面添加了该属性...

public partial class Key
{
    public int? SerialNumber
    {
        get
        {
            int serialNumber;
            if (int.TryParse(SerialNumberString, out serialNumber))
            {
                return serialNumber;
            }

            return null;
        }

        set
        {
            SerialNumberString = value.ToString();
            ReportPropertyChanged("SerialNumber");
        }
    }
}

现在当 ReportPropertyChanged 被调用时,它会抛出这个异常:

System.ArgumentException:属性“SerialNumber”在实体对象上没有有效的实体映射。有关详细信息,请参阅实体框架文档。

我在另一个不会抛出的生成数据类中有相同的代码,唯一的区别是继承,这是怎么回事?

4

3 回答 3

1

就EF而言,没有SerialNumber财产。它知道的唯一属性SerialNumberString

所以这SerialNumberString是更改的属性,而不是SerialNumber.

即你想这样做:ReportPropertyChanged("SerialNumberString");

实际上,这在您的代码中是多余的,因为您在 SerialNumber 设置器中调用了 Public SerialNumberString 设置器,即:

set
{
    SerialNumberString = value.ToString();
    ReportPropertyChanged("SerialNumberString");
}

所以SerialNumberStringsetterReportPropertyChanged("SerialNumberString")无论如何都会调用......所以你应该完全删除该行:

set
{
    SerialNumberString = value.ToString();
}

希望这可以帮助

亚历克斯

顺便说一句,您也应该value.HasValue == false在 Setter 中处理。

于 2009-07-09T04:07:00.387 回答
0

我以前从未做过这种事情,但我注意到它在映射中显示“SerialNumberString”,而它抱怨的属性是“SerialNumber”。他们应该是一样的吗?

于 2009-07-09T02:19:40.570 回答
0

Just a shot in the dark. Is "Key" a reserved word? If it were me, I'd change that entity name to something less related to the data structures.

For troubleshooting, does this error occur if you were to extend the base class "Product" instead of the inherited class?

于 2009-07-09T02:40:17.527 回答