EntityFramework Code使用自定义鉴别器进行第一次继承

编程入门 行业动态 更新时间:2024-10-26 14:31:38
本文介绍了EntityFramework Code使用自定义鉴别器进行第一次继承的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在尝试在EntityFramework代码中映射以下继承

I'm trying to map the following inheritance in EntityFramework Code First

public class Member { public string ProjectName { get; set; } public string AssemblyName { get; set; } public string NamespaceName { get; set; } public string TypeName { get; set; } public string Signature { get; set; } public string DisplayName { get; set; } public MemberType Type { get; set; } public string Summary { get; set; } public bool IsStatic { get; set; } public bool IsInherited { get; set; } //public virtual Type ParentType { get; set; } // ignore this } public class Field : Member { public string ValueType { get; set; } public bool IsReadOnly { get; set; } public bool IsVolatile { get; set; } } public enum MemberType { Constructor, Field, Method, Operator, Property }

正如您可以从代码中猜到的那样,我计划添加成员的更多子类(名为构造函数,方法,运算符和属性),但首先我想让Field一个正常工作。

As you can probably guess from the code, in time I plan to add more subclasses of Member (named Constructor, Method, Operator and Property), but first I'd just like to get the Field one to work properly.

我的映射代码看起来像这样

My mapping-code looks like this

modelBuilder.Entities<Member>().Configure(config => { config.HasKey(m => new { m.ProjectName, m.AssemblyName, m.NamespaceName, m.TypeName, m.Signature }); config.Property(m => m.DisplayName).IsRequired(); config.ToTable("Members"); }); modelBuilder.Entities<Field>().Configure(config => { config.HasKey(f => new { f.ProjectName, f.AssemblyName, f.NamespaceName, f.TypeName, f.Signature }); }); modelBuilder.Entity<Member>() .Map<Field>(m => { m.ToTable("Fields"); m.Requires("Type").HasValue((int)Service.DataTypes.MemberType.Field).IsRequired(); }); // note: realy not certain about this one

我想要的是生成两个表。一个名为成员,一个名为Fields,并在成员 -class中使用类型 -property作为一个歧视者,我相信我只是在这里做一些非常愚蠢的事情,但是我无法为我的生活找出如何做到这一点。因为使用当前的代码,它会在Fields表格中生成一个名为Type的列,您显然不需要这个列,因为这是一个常数。

What I would like, is to generate two tables. One named "Members", and one named "Fields", and use the Type-property in the Member-class as a discriminator, and I'm sure I'm just doing something really stupid here, but I cannot for the life of me figure out how to do it. Because with the current code, it generates a column in the "Fields" table named "Type", which you obviously wouldn't need as that'd be a constant.

所以我只是想知道,有人可以告诉我,我做错了什么?

So I'm just wondering, could somebody please tell me what on earth I'm doing wrong?

推荐答案

有没有打字错误?你的类有一个字段Valuetype Not Type。

Is there a typo there ? Your Class has a field Valuetype Not Type.

我从来没有尝试过使用JUST 1映射,尝试用第二个表来确保。

I have never tried with with JUST 1 mapping, try with a second table to make sure.

modelBuilder.Entity<Member>() .Map<Field>(m => { m.ToTable("Fields"); m.Requires("ValueType").HasValue((int)Service.DataTypes.MemberType.Field).IsRequired(); }) .Map<SECONDTYPE>(m => { m.Requires("ValueType").HasValue(42); });

更多推荐

EntityFramework Code使用自定义鉴别器进行第一次继承

本文发布于:2023-10-12 21:36:35,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1485968.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:自定义   EntityFramework   Code

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!