ASP MVC实体框架代码第一个使用现有类的模型

时间:2017-09-06 15:39:42

标签: asp.net-mvc entity-framework code-first

知道标题有点模糊,对我的真实问题不是很具描述性,但是这里有。

我有一个新的ASP MVC项目,我有EF设置。它的工作就像一个魅力。 现在我想创建一个新的代码第一个模型,我将用它来存储RSS提要项。

我不想从头开始创建模型,而是非常希望使用System.ServiceModel.Syndication.SyndicationItem作为模型的基础。我可能想要添加一些自定义字段,但是现在我几乎可以使用完全相同的字段和字段类型。

我的问题是,我可以从这个类继承到我的代码第一个模型吗?或者我必须将完全相同的字段和字段类型加倍?

2 个答案:

答案 0 :(得分:1)

如果您只关注SyndicationItem和SyndicationCategory并且不关心忽略某些属性,则可以尝试以下操作:

public class FeedItem : SyndicationItem
{
    [Key]
    public int Id { get; set; }

    // additional properties go here
}

public class MyContext : DbContext
{
    public MyContext()
        : base("name=MyContext")
    {

    }

    public DbSet<FeedItem> FeedItems { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<FeedItem>().HasKey<int>(f => f.Id);
        modelBuilder.Entity<SyndicationCategory>().HasKey(c => c.Name);

        // Ignore entities
        modelBuilder.Ignore<SyndicationPerson>();
        modelBuilder.Ignore<SyndicationLink>();
        modelBuilder.Ignore<SyndicationContent>();
        modelBuilder.Ignore<SyndicationElementExtension>();

        // Ignore properties
        modelBuilder.Entity<FeedItem>().Ignore(f => f.AttributeExtensions);
    }
}

答案 1 :(得分:0)

好的,我试过了。

<强>模型

namespace App.Models
{
    public class FeedItem : System.ServiceModel.Syndication.SyndicationItem
    {
    }
}

数据库上下文

namespace App.DAL
{
    public partial class DbContext : IdentityDbContext<ApplicationUser>
    {
        public DbContext() : base("name=DbContext")
        {
        }

        public static DbContext Create()
        {
            return new DbContext();
        }

        public DbSet<FeedItem> FeedItems { get; set; }
    }
}

在运行应用程序时得到了这个。

  

App.DAL.SyndicationPerson :: EntityType   &#39; SyndicationPerson&#39;没有定义键。为此定义密钥   的EntityType。 App.DAL.SyndicationElementExtension ::   EntityType&#39; SyndicationElementExtension&#39;没有定义键。限定   此EntityType的关键。 App.DAL.SyndicationCategory:   :EntityType&#39; SyndicationCategory&#39;没有定义键。定义密钥   对于此EntityType。 App.DAL.SyndicationLink :: EntityType   &#39; SyndicationLink&#39;没有定义键。为此定义密钥   的EntityType。 SyndicationContents ::引用的EntitySet   &#39; SyndicationContents&#39; for End&#39; FeedItem_Copyright_Target&#39;不可能   在包含EntityContainer中找到。 SyndicationContents :: The   引用的EntitySet&#39; SyndicationContents&#39;为了结束   &#39; SyndicationFeed_Copyright_Target&#39;无法找到   包含EntityContainer。 SyndicationContents ::引用的   EntitySet&#39; SyndicationContents&#39;为了结束   &#39; SyndicationFeed_Description_Target&#39;无法找到   包含EntityContainer。 SyndicationContents ::引用的   EntitySet&#39; SyndicationContents&#39; for End&#39; SyndicationFeed_Title_Target&#39;   无法在包含EntityContainer中找到。   SyndicationContents ::引用的EntitySet&#39; SyndicationContents&#39;   for End&#39; FeedItem_Summary_Target&#39;在含有中找不到   EntityContainer相关。 SyndicationContents ::引用的EntitySet   &#39; SyndicationContents&#39; for End&#39; FeedItem_Title_Target&#39;不可能   在包含EntityContainer中找到。 SyndicationPersons:   EntityType:EntitySet&#39; SyndicationPersons&#39;是基于类型   &#39; SyndicationPerson&#39;没有定义键。   SyndicationElementExtensions:EntityType:EntitySet   &#39; SyndicationElementExtensions&#39;是基于类型   &#39; SyndicationElementExtension&#39;没有定义键。   SyndicationCategories:EntityType:EntitySet&#39; SyndicationCategories&#39;   基于类型&#39; SyndicationCategory&#39;没有定义键。   SyndicationLinks:EntityType:EntitySet&#39; SyndicationLinks&#39;是根据   类型&#39; SyndicationLink&#39;没有定义键。 SyndicationContents:   EntityType:EntitySet&#39; SyndicationContents&#39;是基于类型   &#39; SyndicationContent&#39;没有定义键。

我可能错过了一些东西。