我使用Entity Framework 4.0 RC时遇到异常.我的实体框架模型封装在一个私有程序集中,其名称为Procurement.EFDataProvider,我的POCO类位于另一个程序集中.Procurement.Core Core(业务逻辑)和EFDataProvider(数据访问)之间的关系是一个名为DataProvider的工厂
所以当我尝试创建一个对象集
objectSet = ObjectContext.CreateObjectSet<TEntity>();
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
无法找到EntityType'Procurement.Core.Entities.OrganizationChart'的映射和元数据信息.
我刚安装了EF4的POCO模板.我的模型中有一个实体,AnnouncementText,并且T4文件似乎正确生成.当我访问自动生成的属性时,尝试访问此新实体会引发以下错误MyObjectContext.AnnouncementTexts:
InvalidOperationException:无法找到EntityType'MyNamespace.AnnouncementText'的映射和元数据信息.
AnnouncementTextPOCO 上的属性似乎与数据库中的列匹配,并且我没有更改任何自动生成的代码.
堆栈跟踪是:
at System.Data.Objects.ObjectContext.GetTypeUsage(Type entityCLRType)
at System.Data.Objects.ObjectContext.GetEntitySetForNameAndType(String entitySetName, Type entityCLRType, String exceptionParameterName)
at System.Data.Objects.ObjectContext.CreateObjectSet[TEntity](String entitySetName)
at MyNamespace.MyObjectContext.get_AnnouncementTexts() in C:\<snip>\MyObjectContext.Context.cs:line 65
at MyNamespace.Class1.Main() in C:\<snip>\Class1.cs:line 14
Run Code Online (Sandbox Code Playgroud)
如果我.tt从解决方案中删除文件并在模型上启用代码生成,我可以毫无问题地访问该属性.
这是我的代码,如果可能有帮助:
using (var context = new MyObjectContext())
foreach (var at in context.AnnouncementTexts)
Console.WriteLine(at.Title);
Run Code Online (Sandbox Code Playgroud)
关于可能出错的任何想法?
业务:
我有一个支付系统,可以通过GiftCoupon,ClubMembershipCard等支付.一个支付本身可以有多个支付组件
课程:
我有一个付款类.它有支付组件,如GiftCouponPayment,ClubMembershipCardPayment,CashPayment等.每种组件类型都满足通用接口IPaymentComponent.我使用有关现有类型的知识实现了它.
问题
1)如何以抽象的方式实现这个功能- 不知道存在哪些类型?这意味着它需要适用于实现IPaymentComponent接口的所有类型.
2)如果在LINQ to SQL中无法实现它,是否可以在Entity Framework中实现?
3)当LINQ to SQL在Payment对象中生成GiftCouponPayment实体时,它是关联/聚合还是组合?
注意:我使用LINQ to SQL作为ORM.GiftCouponPayment和Payment是自动生成的类,这些对象由ORM创建.我通过使用部分类为这些类添加了更多功能.
注意:在数据库中,每个PaymentComponent(例如GiftCouponPayment)都有自己的属性(例如CouponValue,CardValue等).因此,按层次结构表将不会很好.我们需要单独的表格.那条线路有解决方案吗?
注意:此付款之前,数据库中已存在GiftCouponPayment.我们需要使用客户提供的GiftCouponPaymentID来识别GiftCouponPayment对象.我们只需要更新此表中的PaymentID列.
泄漏抽象是指任何已实现的抽象,旨在减少(或隐藏)复杂性,其中底层细节未被完全隐藏
LINQ to SQL Diagram

参考:
C#代码
public interface IPaymentComponent
{
int MyID { get; set; }
int MyValue { get; set; }
int GetEffectiveValue();
}
public partial class GiftCouponPayment : IPaymentComponent
{
public int MyID
{
get
{
return this.GiftCouponPaymentID;
}
set
{
this.GiftCouponPaymentID = …Run Code Online (Sandbox Code Playgroud)