asp.net-mvc-3 – 如何使用EF-Code-First将大表分成多个离散类型
我试图将一个大表分成多个离散类型.
我在这里遵循这个例子:http://weblogs.asp.net/manavi/archive/2011/04/24/associations-in-ef-4-1-code-first-part-4-table-splitting.aspx?CommentPosted=true#commentmessage 它适用于主类型和子类型,但在使用多种类型时不起作用.我收到了一个错误
以下是我的类的简化版本: public class Campaign { [Key] public int CampaignId {get;set;} public string Name {get;set;} public virtual CampaignSurvey Survey {get;set;} public virtual CampaignFeedback Feedback {get;set;} } public class CampaignSurvey { [Key] public int CampaignId {get;set;} public string Question {get;set;} public string Answer {get;set;} } public class CampaignFeedback { [Key] public int CampaignId {get;set;} public string Feedback {get;set;} } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); modelBuilder.Entity<Campaign>().HasRequired(c => c.Survey).WithRequiredPrincipal(); modelBuilder.Entity<Campaign>().HasRequired(c => c.Feedback).WithRequiredPrincipal(); modelBuilder.Entity<Campaign>().ToTable("Campaign"); modelBuilder.Entity<CampaignSurvey>().ToTable("Campaign"); modelBuilder.Entity<CampaignFeedback>().ToTable("Campaign"); } 解决方法
编辑:首先在代码中将表拆分为两个以上的实体是非常有问题的.使用EDMX时它没有任何问题.
要使其工作,您必须确保用于拆分表的每个实体与用于拆分表的所有其他实体具有有效的一对一关系.这也意味着使用导航属性破坏您的模型,并且确保在保存期间指向相同实体类型的所有导航属性引用相同的实例(否则您将在调用SaveChanges期间获得异常). 所以你的例子的解决方案应该是这样的: public class Campaign { [Key] public int CampaignId {get;set;} public string Name {get;set;} public virtual CampaignSurvey Survey {get;set;} public virtual CampaignFeedback Feedback {get;set;} } public class CampaignSurvey { [Key] public int CampaignId {get;set;} public string Question {get;set;} public string Answer {get;set;} public virtual CampaignFeedback Feedback {get;set;} } public class CampaignFeedback { [Key] public int CampaignId {get;set;} public string Feedback {get;set;} } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); modelBuilder.Entity<Campaign>().HasRequired(c => c.Survey).WithRequiredPrincipal(); modelBuilder.Entity<Campaign>().HasRequired(c => c.Feedback).WithRequiredPrincipal(); modelBuilder.Entity<CampaignSurvey>().HasRequired(c => c.Feedback).WithRequiredPrincipal(); modelBuilder.Entity<Campaign>().ToTable("Campaign"); modelBuilder.Entity<CampaignSurvey>().ToTable("Campaign"); modelBuilder.Entity<CampaignFeedback>().ToTable("Campaign"); } 我甚至不确定这在真实场景中是如何工作的.使用它时,您可以找到一些其他问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – EntityFramework – 连接字符串在哪里?
- .net – 如何在MVC 5中设置本地授权认证?
- 在ASP.NET MVC中使用Razor创建可重用的HTML视图组件
- asp.net-mvc – ASP.NET不向客户端发送上传进度
- .net – 如何序列化邮件?
- asp.net-mvc – 将变量与静态html连接起来的语法
- asp.net – Textbox错误的价值
- asp.net-web-api – SelfHosted AspNet WebAPI与不同项目中
- 想想就好:我感觉我欠下的代码,再写十年也写不完
- asp.net核心 – 我需要哪个包在asp.net 5中的图像?
- asp.net – 如何集成ASP .Net Model View Presen
- asp.net-mvc – ASP.NET MVC:如何处理View中的N
- asp.net – 谷歌Chrome在崩溃后恢复会话cookie,如
- RegisterStartupScript无法在更新面板中工作,无法
- asp.net – 如何将网页转换为图像?
- ASP.NET将原始HTML解析为控件
- asp.net:控件/页面的页面生命周期顺序与其中的用
- asp.net-core – 无法解析“Microsoft.Applicati
- asp.net-core – 从与xproj相同的解决方案引用cs
- 当连接意外关闭时,ASP.NET页面生命周期是否会全程