0

私はコードファーストアプローチでEF5を使用しています。ここで、いくつかの異なるコード(アドレスコード、ミディアムコードなど)が必要な「コード」テーブルを定義しようとしています。このテーブルには、ID(Guid)、Name(String)、Description(String)、および識別子(この場合、コードのタイプのようなもの:アドレスコード、メディアコードなど)のプロパティがあります。

そこで、次の基本クラスを定義しました。

public abstract class Code : EntityBase
{
    public string Name { get; set; }
    public string Beschreibung { get; set; }
}

次に、コードから2つのクラスを派生させました

public class AddressCode : Code {}
public class MediumCode : Code {}

クラスEntityBaseは抽象であり、Idプロパティを定義するだけで、すべてのPOCOクラスに使用します...

目標は、AddressCodeをアドレスPOCOクラスのプロパティとして使用できるようにすることです。

public class Adresse : EntityBase
{
    #region Properties
    public string Name1 { get; set; }

    public virtual AddressCode AddressCode { get; set; }
    #endregion
}

今の問題は、EFにそれをどのように説明できるかということです。誰でも助けることができますか?

ありがとうマルコ


ご回答有難うございます!

私はあなたが言ったようにそれをやろうとしました。残念ながら、EntityBaseクラスが原因でエラーが発生します。

public abstract class EntityBase
{
    #region Properties

    public virtual Guid Id { get; set; }

    public virtual bool IsValid
    {
        get
        {
            {
                return Validate();
            }
        }
    }

    [NotMappedAttribute]
    public virtual IList<ValidationFailure> ValidationFailures { get; set; }

    #endregion

    #region Methods

    private bool Validate()
    {
        var validatorFactory = new AttributedValidatorFactory();
        IValidator validator = validatorFactory.GetValidator(GetType());

        if (validator == null)
        {
            return true;
        }

        ValidationResult validationResult = validator.Validate(this);

        ValidationFailures = validationResult.Errors;

        return validationResult.IsValid;
    }

    #endregion
}

エラーメッセージは次のとおりです。このタイプは、このプロパティがマップされているタイプ'Entities.EntityBase'を継承しているため、タイプ'Entities.AdresseCode'のプロパティ'ValidationFailures'でIgnoreメソッドを使用できません。このプロパティをモデルから除外するには、基本タイプでNotMappedAttributeまたはIgnoreメソッドを使用します。

ご覧のとおり、プロパティValidationFailuresをNotMappedとして定義しましたが、それでもこのエラーが発生します。アイデアはありますか?

ありがとうマルコ

4

2 に答える 2

0

最後に、私はそれを働かせました!

DBContext では、他のすべての POCO の前にコード派生クラスの DbSet を定義することに注意してください。

于 2012-11-08T07:34:00.567 に答える
0

コンテキストを作成するだけです(から派生DbContext

public class AddressesDb : DbContext
{
    public DbSet<Code> Codes { get; set; }
    public DbSet<Adresse> Adressen { get; set; }
}

また、(コードで使用する場合) EF は、既定のテーブル名と列名でデータベースを作成します。nvarcharから派生したクラスの名前を含むtext() 型の識別子列を作成しますCode

別の名前やタイプが必要な場合は、データ注釈または流暢な APIを使用してこれらを構成する必要があります。

于 2012-11-07T09:01:31.760 に答える