我使用 EDMX 文件创建了一个简单的解决方案,该文件包含一个表Sport
,其中包含2个字段IdSport
和Label
。我想在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
。我需要继承类来添加一些属性和其他功能,但是当我保存它时,我想只保存父对象{{1}}拥有的属性。
错误讯息:
无法找到EntityType
的映射和元数据信息
我知道通常的方法是使用partial class但是在我的项目中, EDMX 文件在另一个项目中,所以我看到的唯一解决方案是使用继承的类。
我做错了什么?如何解决我的问题?是否存在更好的方法呢?
感谢。
答案 0 :(得分:2)
在搜索gooogle时,我发现了以下链接,其中讨论了一个非常类似的场景:
Deriving from classes generated by Entity Framework in C#
虽然有一个帖子标记为答案,但第二个答案同样相关。
希望这有帮助。
答案 1 :(得分:1)
实体框架似乎在保存实体期间使用了一种反射,这可能是您的遗产不起作用的原因。您仍然可以使用扩展方法向您的enties添加功能的一种方法(尽管只是函数):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() {};
}