c# – 实体框架4.1代码优先和一对多映射问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 实体框架4.1代码优先和一对多映射问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2312字,纯文字阅读大概需要4分钟。
内容图文
![c# – 实体框架4.1代码优先和一对多映射问题](/upload/InfoBanner/zyjiaocheng/791/51124a830237406cbd0aaf1a8f54041a.jpg)
我有映射现有数据库的问题.
2桌(简化)
"SomeEntity"
Id int
Name nvarchar
和
"EntityProperty"
EntityId int
Name nvarchar
并且从实体到实体属性具有一对多的关系.
我如何使用EF 4.1 Code First进行映射?
Thx提前.
编辑1:
好的)这是我的代码
class Program
{
static void Main(string[] args)
{
var context = new DataContext();
var result = context.SomeEntity.Include(p => p.EntityProperties);
foreach (var entity in result)
{
Console.WriteLine(entity);
}
}
}
public class SomeEntity
{
public int EntityId { get; set; }
public string Name { get; set; }
public virtual ICollection<EntityProperty> EntityProperties { get; set; }
public override string ToString()
{
return string.Format("Id: {0}, Name: {1}", EntityId, Name);
}
}
public class EntityProperty
{
public int EntityId { get; set; }
public string Name { get; set; }
}
public class DataContext : DbContext
{
public DbSet<SomeEntity> SomeEntity { get { return this.Set<SomeEntity>(); } }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<SomeEntity>().ToTable("SomeEntity");
modelBuilder.Entity<SomeEntity>().HasKey(k => k.EntityId);
modelBuilder.Entity<EntityProperty>().ToTable("EntityProperty");
modelBuilder.Entity<EntityProperty>().HasKey(k => k.EntityId);
}
}
在查询获取属性时使用Include时出现问题:
列名称“SomeEntity_EntityId”无效.
列名称“SomeEntity_EntityId”无效.
解决方法:
public class SomeEntity
{
public int SomeEntityId {get;set;}
public string Name {get;set;}
public ICollection<EntityProperty> EntityProperties {get;set;}
}
public class EntityProperty
{
public int EntityPropertyId {get;set;}
public string Name {get;set;}
}
创建ICollection(在关系的“1”侧)应足以设置1:N关系.它将在EntityProperty表中创建SomeEntity_Id(或SomeEntityId)列.
编辑:顺便说一句:如果要启用延迟加载,可以将该集合设置为虚拟.
public virtual ICollection<EntityProperty> EntityProperties {get;set}
编辑:
public class SomeEntity
{
[Key]
public int Id {get;set;}
public string Name {get;set;}
}
public class EntityProperty
{
// What is PK here? Something like:
[Key]
public int Id {get;set;}
// EntityId is FK
public int EntityId {get;set;}
// Navigation property
[ForeignKey("EntityId")]
public SomeEntity LinkedEntity {get;set;}
public string Name {get;set;}
}
首先尝试这个…然后你可以再次添加ICollection,这次我没有包含它以保持简单(你还是一个查询属性..但是:context.EntityProperties.Where(x => x.EntityId == X);)
内容总结
以上是互联网集市为您收集整理的c# – 实体框架4.1代码优先和一对多映射问题全部内容,希望文章能够帮你解决c# – 实体框架4.1代码优先和一对多映射问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。