Отношение HasForeignKey через свойство Complex Type

1

У меня два сложных типа:

public class ProductItemIdentifier
{
    public Guid Product_Id { get; set; }
    public string ItemName { get; set; }
}

public class AuctionItemIdentifier
{
    public Guid Auction_Id { get; set; }
    public string ItemName { get; set; }
}

У меня есть тип объекта:

public class Comment
{
    public Guid Id { get; set; }
    public string Comment { get; set; }

    public ProductItemIdentifier ProductItem { get; set; }
    public AuctionItemIdentifier AuctionItem { get; set; }

    #region Navigation

    public virtual Product Product { get; protected set; }
    public virtual Auction Auction { get; protected set; }

    #endregion
}

И вот Configuration

public class CommentConfiguration : EntityTypeConfiguration<Comment>
{
    HasKey(p => p.Id);

    HasOptional(p => p.Product).WithMany().HasForeignKey(p => p.ProductItem.Product_Id).WillCascadeOnDelete(false);
    HasOptional(p => p.Auction).WithMany().HasForeignKey(p => new { p.AuctionItem.Auction_Id }).WillCascadeOnDelete(false);
}

В основном я пытаюсь создать внешний ключ через свойство Complex Type (и не работает).

Ошибка, которую я получаю:

The properties expression 'p => p.ProductItem.Product_Id' is not valid. The expression should represent a property: C#: 't => t.MyProperty'  VB.Net: 'Function(t) t.MyProperty'. When specifying multiple properties use an anonymous type: C#: 't => new { t.MyProperty1, t.MyProperty2 }'  VB.Net: 'Function(t) New With { t.MyProperty1, t.MyProperty2 }'.

Есть ли способ создать отношения без добавления столбцов внешнего ключа к объекту Comment напрямую?

Теги:
entity-framework
entity-framework-6
ef-fluent-api

2 ответа

1
Лучший ответ

Это невозможно. Исключение говорит об этом явно.

Выражение должно представлять свойство: С#: 't => t.MyProperty'

Это должно быть простое свойство.

public class Comment
{
    ...

    public Guid Product_Id { get; protected set; } // simple property
    public virtual Product Product { get; protected set; }
}

Конфигурация.

HasOptional(p => p.Product)
    .WithMany()
    .HasForeignKey(p => p.Product_Id) // satisfies the C#: 't => t.MyProperty'
    .WillCascadeOnDelete(false);

И маркировка класса ProductItemIdentifier с помощью [ComplexType] тоже не поможет.

0

мое решение заключалось в создании некоторых фиктивных объектов

public Guid AuctionItem_Auction_Id 
        {
            get { return AuctionItem.Auction_Id; }
            set { AuctionItem.Auction_Id = value; }
        }

    [ForeignKey("AuctionItem_Auction_Id")]
    public virtual Auction Auction { get; protected set; }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню