3

我还没有看到有人提出过这样的问题。因此,我为 EF fluent api 开发人员和 nopcommerce 插件开发人员创建了一个。

这是我正在尝试做的事情:

我有一个产品实体,EF 可以使用它来生成数据库。我想在不修改原始类的情况下扩展产品实体。所以,我一直在尝试使用部分类。这里的代码看起来像:

namespace Nop.Core.Domain.Catalog
{
    /// <summary>
    /// Represents a product
    /// </summary>
    public partial class Product : BaseEntity, ILocalizedEntity, ISlugSupported, IAclSupported, IStoreMappingSupported
    {
        //some fields here.
        public int ProductTypeId { get; set; }
        //.....
    }
}

现在,当我像这样扩展类时:

namespace Nop.Core.Domain.Catalog
{
    public partial class Product : BaseEntity
    {
        public int RestaurantId { get; set; }

        public virtual Restaurant BelongRestaurant { get; set; } 
     }
}

它会抛出一个错误。

“Nop.Core.Domain.Catalog.Product”类型和“Nop.Core.Domain.Catalog.Product”类型都具有相同的简单名称“Product”,因此不能在同一模型中使用。给定模型中的所有类型都必须具有唯一的简单名称。在 Code First fluent API 中使用“NotMappedAttribute”或调用 Ignore 以从模型中显式排除属性或类型。

这是我的映射文件的样子:

namespace Nop.Plugin.Misc.Plugin
{
    public partial class ProductMap : EntityTypeConfiguration<Nop.Core.Domain.Catalog.Product>
    {
        public ProductMap()
        {
            //Table
            this.ToTable(Settings.DATABASE_TABLE_NAME);

            //Primary Key
            this.HasKey(t => t.Id);

            //Property
            this.Property(t => t.Id)
                .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
            this.HasRequired(p => p.BelongRestaurant)
                .WithMany(r => r.Menu)
                .HasForeignKey(p => p.RestaurantId)
                .WillCascadeOnDelete(false);
        }
    }
}

有人可以帮忙吗?

4

1 回答 1

2

partial class只是一种语法糖,它允许您为一个类拥有多个文件。也就是说,您可以在同一个项目中创建尽可能多的部分类。

但是当你在另一个项目中使用一个类时,即使它是一个partial class,你也不能创建另一个文件partial class来扩展它的功能。

阅读有关部分类和方法(C# 编程指南)的更多信息。

于 2014-08-23T12:58:16.800 回答