使用部分类扩展实体框架5实体,并将其映射到现有的其他实体

本文关键字:实体 映射 其他 分类 用部 扩展 框架 | 更新日期: 2023-09-27 18:19:08

我还没有看到有人提出过这样的问题。所以,我为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; } 
     }
}

会抛出一个错误。

类型为"no . core . domain . catalog"。"产品"和类型"Nop.Core.Domain.Catalog。产品都有相同的简单名称"产品",因此不能在同一型号中使用。a中的所有类型给定的模型必须具有唯一的简单名称。使用"NotMappedAttribute"或在Code First流畅的API中调用Ignore来显式地排除a属性或类型。

下面是我的映射文件:

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

有人能帮忙吗?

使用部分类扩展实体框架5实体,并将其映射到现有的其他实体

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

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

阅读更多关于部分类和方法(c#编程指南)