- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在 VS2012 中(.NET 4.5 和 Entity Framework 5)
暴露继承关系时,导致编译时错误:
You cannot use Ignore method on the property 'InnerString' on type 'MrTree.SubSubClass' because this type inherits from the type 'MrTree.BaseClass' where this property is mapped. To exclude this property from your model, use NotMappedAttribute or Ignore method on the base type.
代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
MyDbcontext db = new MyDbcontext();
int i = db.SubSubClasses.Count();
}
}
public class BaseClass
{
[NotMapped]
public string InnerString { get; set; }
}
public class SubClass : BaseClass
{
}
public class SubSubClass : SubClass
{
}
public class MyDbcontext : DbContext
{
public DbSet<SubSubClass> SubSubClasses { get; set; }
public DbSet<SubClass> SubClasses { get; set; }
}
}
你能告诉我哪里出了问题吗?
最佳答案
我已经找到解决这个问题的方法,我自己也遇到过。我确实发布了一些关于可能导致问题的补充信息,但它被一些自负的 Nerd 删除了,他们认为它不值得。所以这是我对这个问题的回答 - 可能不完全正确,但它对我有用,所以请不要删除这个 Nerd 先生,以防它帮助其他人。
首先,这个问题只影响那些不直接使用 NotMapped 属性继承抽象类的类,而是那些继承自另一个类的类,而另一个类本身继承自基类,如原始声明所示。
以下使用类似于以下类设置的东西对我有用:
基础类:
public abstract class EntityBase
{
public virtual int Id { get; set; } // this will be mapped
public virtual int DoNotMap { get; set; } // this should be ignored
}
一级继承
public class Contact : EntityBase
{
public string Name { get; set; }
}
二级继承
public class Employee : Contact
{
public DateTime StartDate { get; set; }
}
创建一个继承自 EntityTypeConfiguration 的通用配置类:
public class DataEntityBaseConfiguration<T>
: EntityTypeConfiguration<T> where T : EntityBase
{
public DataEntityBaseConfiguration()
{
Ignore(x => x.DoNotMap);
}
}
为所有直接继承自EntityBase类的一级继承创建配置类,即:
public class ContactConfiguration : DataEntityBaseConfiguration<Contact>
{
// place any further configuration rules in the constructor
}
解决方法:任何间接继承自 EntityBase 的类,只需创建一个继承自 EntityTypeConfiguration 的配置类:
public class EmployeeConfiguration : EntityTypeConfiguration<Employee>
{
// place any further configuration rules in the constructor
}
在您的 DataContext 中,在 OnModelCreating 方法中,添加您的配置:
modelBuilder.Configurations.Add(new ContactConfiguration()); modelBuilder.Configurations.Add(new EmployeeConfiguration());
假设在这种情况下使用 TPT 方法,将专用版本 Employee 映射到它自己的表,并与 Contact 建立 FK 关系:
modelBuilder.Entity<Contact>().Map<Employee>(m => m.ToTable("Employees"));
至少对我来说,这创建了一个没有“DoNotMap”属性的联系人表和一个没有“DoNotMap”表且与联系人具有 PK/FK 关系的员工表。即使我没有继承 EntityBaseConfiguration 的 Employee Configuration,它仍然以某种方式选择 Ignore 并将其排除在外。我假设如果我们采用 TPH 方法,我们最终只会得到一个 Contact 表和 Discriminator 列。 TPC 显然会重新创建 Employee 表中的所有 Contact 属性,但我不确定它是否还会创建 DoNotMap 属性 - 将在我有空的时候测试它。
简而言之,回到最初的问题,我不确定为什么 NotMapped 属性和 Ignore 都会发生这种情况。当我的 EmployeeConfiguration 从 EntityBaseConfiguration 继承时,我遇到了错误。我并不热衷于解决方法,因为它首先错误在其声明中是错误的,其次,这是一个很容易再次陷入的错误,即使解决方案现在非常简单。
希望能帮助那些在继承问题上苦苦挣扎的人。
问候
关于c# - EF5 和 .NET 4.5 中的 NotMapped 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12362243/
我已经设置了我的 EF 代码优先数据库,但想要添加其他派生属性。 (是的,它应该在 View 模型中,我们可以下次再讨论为什么会这样。)我创建了一个扩展实际表类的部分类。如果我将 [NotMapped
我首先使用 EF6 代码,然后我使用了 this答案映射List在我的实体中。 这是我的类(class) [Key] public string SubRubro { get; set
我无法在实体属性上使用 [NotMapped] 属性,因为迁移添加命令在下面抛出错误; 这是我的POCO; using System; using System.Collections.Generic
我正在使用 EF Core 3.0 将数据从 SQL Server 存储过程提取到名为 Recipient 的对象模型中。 Recipient 模型定义了几个属性,EnvelopeId 和 Name,
为什么在下面的示例中需要 [NotMapped] 属性: public virtual ICollection Blogs { get; set; } [NotMapped] public L
我刚刚将 entityframework 更新到最新的 5.0.0 版本。 NotMapped 注释现在不起作用。我试图在谷歌上搜索修复它的答案,但找不到。当您更新 Entity Framework
我有一个运行良好的实体,但我需要添加来自另一个表的附加属性。我没有创建 View 的能力,所以我只想添加一个 [NotMapped] 字段,然后使用 Context.Database.SqlQuery
我有一些模型类用作 Entity Framework 代码优先模型。我在这些模型上有一些不属于数据库模式的属性,为了确保 Entity Framework 不会混淆,我用 [NotMapped] 属性
我正在开发一个 asp.net mvc-5 网络应用程序,我正在使用 Entity Framework 5.0。我映射了创建 .edmx 文件的 SQL 服务器数据库表。现在我想扩展模型类以具有额外的
我是 laravel 的新手,因此我的问题对某些人来说可能很奇怪。好吧,我的问题是如何在 Laravel Model 类中编写一个实体,该实体在迁移后不会在数据库中创建任何字段。例如 class Jo
我在尝试保存更改时收到以下异常:System.Data.SqlClient.SqlException:列名“ClientID”无效。列名称“ID”无效。 ClientID 属性有一个 [NotMapp
我有一个用 context.Database.SqlQuery("MyProc") 执行的存储过程 MyObject有一个只读属性: [NotMapped] public bool IsSomethi
我有一个 WebAPI 后端,它使用 ODATA v3 向各种客户端提供库存信息等(由于我们使用的组件的限制,我不能使用 v4)。库存数据库非常大(超过 10 万条记录),ODATA 非常适合服务器端
有时从这样的基类派生我的实体很有用: public abstract class DestructableBase : IDestructable { /// /// If true,
我将 WCF 数据服务用于返回 JSON 响应的 RESTful API。 考虑这个对象: [Table("person")] public class Person { [Column("d
我有以下类(class): public class Contact { public int ContactID { get; set; } public string FirstN
这是一个有点复杂的问题,请耐心等待。我们目前在我们的服务器上使用 Entity Framework 6.1.1,在客户端使用 OData 5.6 和 Breeze JS 1.5.4。简而言之,我们在将
我已经开始玩 Dapper.Net,到目前为止我真的很喜欢它 - 然而,我遇到了一个问题。 假设我有一个 POCO 类: public class Person { public string
我已经开始玩 Dapper.Net,到目前为止我真的很喜欢它 - 然而,我遇到了一个问题。 假设我有一个 POCO 类: public class Person { public string
我正在尝试弄清楚如何将 NotMapped 属性与 OData 结合使用 我有这个用户模型: [DataContract] public class User { [DataMember] publi
我是一名优秀的程序员,十分优秀!