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);
}

基本上我正在尝试通过复杂类型属性创建一个外键(并且不起作用)。

我得到的错误是:

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实体的情况下创建关系?

4

2 回答 2

1

这是不可能的。例外明确表示。

该表达式应表示一个属性:C#: '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]也无济于事。

于 2014-10-01T08:23:45.397 回答
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; }
于 2016-08-11T13:46:02.460 回答