实体框架 - 如何不将继承的类添加到db

时间:2015-12-22 15:03:24

标签: c# entity-framework

我有基类

public class MenuItem
{
        [Key]
        public Guid MenuItemID { get; set; }

        public int MenuType { get; set; }
        public Boolean IsActive { get; set; }
        public String Details { get; set; }
}

和一个继承的类

public class MenuItem_URL : MenuItem
{
        public String StartURL { get; set; }
        public Boolean ChangePageEnabled { get; set; }
}

我首先使用Entity Framework代码。

现在我想要存储在数据库MenuItem行中但不存储MenuItem_URL

我添加到上下文

public DbSet<MenuItem> MenuItems { get; set; }

问题是在我的数据库中为MenuItem

创建了奇怪的表
[MenuItemID] [uniqueidentifier] NOT NULL,
[MenuType] [int] NOT NULL,
[IsActive] [bit] NOT NULL,
[Details] [nvarchar](max) NULL,
[StartURL] [nvarchar](max) NULL,
[ChangePageEnabled] [bit] NULL

为什么实体框架会添加StartURLChangePageEnabled列?怎么告诉他不要?我想只存储基础MenuItem对象而没有来自继承对象的任何其他数据

2 个答案:

答案 0 :(得分:3)

可以通过使用try { ... } catch(IOException e) { throw new AuthentificationResourceException(e, response); } catch (Exception e) { throw new AuthentificationResourceException(e, response); } 属性告诉EF忽略属性或整个类

NotMapped

或在流畅配置中使用[NotMapped] public class MenuItem_URL : MenuItem { public String StartURL { get; set; } public Boolean ChangePageEnabled { get; set; } } 方法。

Ignore<T>()

答案 1 :(得分:0)

告诉实体框架,它不需要存储属性。

public class MenuItem_URL : MenuItem
{
    [NotMapped]
    public String StartURL { get; set; }
    [NotMapped]
    public Boolean ChangePageEnabled { get; set; }
}