【问题标题】:EF inherited object insert failed because of mapping由于映射,EF 继承对象插入失败
【发布时间】:2014-02-18 13:14:47
【问题描述】:

我使用 EDMX 文件创建了一个简单的解决方案,该文件拥有一个表 Sport 和 2 个字段 IdSportLabel。我想在 DB 中插入一条记录,其对象继承自 EF 创建的 Sport 对象。

Public Class Index
    Inherits System.Web.UI.Page
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim aSport As New TestSport()
        Using ctx As New FormationEntities
            ctx.AddObject("Sport", aSport)
            ctx.SaveChanges()
        End Using
    End Sub
End Class

Public Class TestSport
    Inherits Sport
End Class

使用Sport 对象它可以工作,但不能使用TestSport。我需要继承类来添加一些属性和其他功能,但是当我保存它时,我只想保存父对象Sport拥有的属性。

错误信息:

找不到 EntityType 的映射和元数​​据信息

我知道通常的方法是使用部分类,但在我的项目中,EDMX 文件在另一个项目中,所以我看到的唯一解决方案是使用继承类。

我做错了什么?如何解决我的问题?是否存在更好的方法来做到这一点?

谢谢。

【问题讨论】:

    标签: asp.net vb.net entity-framework inheritance


    【解决方案1】:

    在通过谷歌搜索时,我找到了以下链接,其中讨论了一个非常相似的场景:

    Deriving from classes generated by Entity Framework in C#

    虽然有一个帖子被标记为答案,但第二个答案同样相关。

    希望这会有所帮助。

    【讨论】:

    • 我怀疑我的方式要改变,但我不知道可能性,谢谢你的建议
    【解决方案2】:

    实体框架在保存实体期间似乎使用了一种反射,这可能是您的继承不起作用的原因。您仍然可以向实体添加功能(尽管只有功能)的一种方法是使用扩展方法:http://msdn.microsoft.com/en-us//library/bb383977.aspx

    但如果您需要添加的不仅仅是一些功能,请考虑更结构化的解决方案。将对象的一部分放在数据层中,将同一对象的一部分放在上层中并不是很好的职责分离。
    与其在您的数据项目(我假设)中包含部分类,并将其部分在另一个项目中,不如考虑在您的项目中创建一个“逻辑类”,它围绕您的实体并以这种方式添加功能。例如,您可以通过直接公开实体来做到这一点:

    public class SportLogic  
    {  
        private Sport _sport;  
        public Sport Sport { get { return _sport; } }  
        public string SomeNewProperty { get; set; }
        public void DoStuff() {};
    }  
    

    或者我使用逻辑对象作为实体周围的实际逻辑包装器的方式。它更简洁,因为它完全混淆了实体:任何调用代码都不需要了解您的实体(Sport)对象。

    public class SportLogic
    {
        private Sport _sport;
        public string SportProperty { get { return _sport.SportProperty; } set { _sport.SportProperty = value; } }
        public string SomeNewProperty { get; set; }
        public void DoStuff() {};
    }
    

    【讨论】:

    • 我的目标是在现有项目中创建新架构,因此直接公开实体是最适合我的解决方案。我将测试我如何可以这样工作。您还有其他关于基于实体框架的分层架构的资源吗?
    猜你喜欢
    • 1970-01-01
    • 2014-07-22
    • 2012-09-26
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    相关资源
    最近更新 更多