当前位置:编程学习 > C#/ASP.NET >>

关于Entity Framework的问题,标题里实在说不清楚,有兴趣的进贴看看吧。

首先,有一个如下图的数据库:
[img=http://social.microsoft.com/Forums/getfile/45170/][/img]

这个库的特点是A,B两个表是通过C表关联的,是一个多对多的关系,而C表只有2个外键,无其他字段。

在ADO.NET Entity Framework中生成的实体模型如下:
[img=http://social.microsoft.com/Forums/getfile/45171/][/img]

问题在于C表生成不出来,如果我要操作C表应该怎么做?

多谢各位! --------------------编程问答-------------------- model First ? --------------------编程问答-------------------- 多谢您,忘记说了,我是用Oracle Entity Framework,类似的结构,C为双主键表,结构相同,单独添加C表没问题,但是一起添加的话C表就上不去,不知道您有没有这方面的解决方案。 --------------------编程问答-------------------- 没用过 Oracle,但在 EF 中,要生成实体类,则要求表必须有主键,这就意味着你必须将 C 表的两个外键设为主键。并且,在你所示的情形下,默认也只会生成两个实体类,两个实体类之间是多对多的关系。C 表不会产生对应的实体类,其实也没必要,所有的操作在两个实体类之间就可以完成了,保存到数据库时会自动生成 C 表相应的数据。 --------------------编程问答--------------------
引用 3 楼 orain 的回复:
没用过 Oracle,但在 EF 中,要生成实体类,则要求表必须有主键,这就意味着你必须将 C 表的两个外键设为主键。并且,在你所示的情形下,默认也只会生成两个实体类,两个实体类之间是多对多的关系。C 表不会产生对应的实体类,其实也没必要,所有的操作在两个实体类之间就可以完成了,保存到数据库时会自动生成 C 表相应的数据。


非常感谢,能否请您推荐给我一些关于操作A B表自动生成C中数据的代码?再次感谢! --------------------编程问答-------------------- 如果2个表利用另外个只有主键的表形成多对多关系的话,Entity Framework生成实体模型会舍去那个只有主键的表 --------------------编程问答--------------------
引用 5 楼 zh6335901 的回复:
如果2个表利用另外个只有主键的表形成多对多关系的话,Entity Framework生成实体模型会舍去那个只有主键的表


多谢!有没有实例代码可以推荐,能在操作两张主表的时候连带操作关系表的数据? --------------------编程问答-------------------- public class User
{
    public User
    {
        Roles = new List<Role>();
    }   
    public int UserId { get; set; }
    public string UserName { get; set; }
    public List<Role> Roles { get; set; }


public class Role
{
    public Role
    {
        Users = new List<User>();
    }   
    public int RoleId { get; set; }
    public string RoleName { get; set; }
    public List<User> Users { get; set; }

public class DbEntities : DbContext
{
    public DbSet<User> Users { get; set; }
    public DbSet<Role> Roles { get; set; }
}
添加角色/用户:
var role=new Role {RoleName="Test Role"};
db.Roles.Add(role);
db.SaveChange();


var role=db.Roles.Single(i=>i.RoleId==roleId);
User user=new User
{
   UserName="小明"
};
user.Roles.Add(role);
db.Users.Add(user);
db.SaveChange(); --------------------编程问答-------------------- C表没有主键? 还是联合主键? --------------------编程问答-------------------- 楼主的问题,我之前遇到过,中间那张表确实出不来,不过这不影响你的编程,该怎么使就怎么使, --------------------编程问答-------------------- C表添加联合主键试试,唯一的2个列都组合进去。
不过你这种方式添加Model不慢吗?当表的数量达到1千个以上的时候,这样将可能导致视图假死几十分钟乃至更长,还是应该写个代码生成器按照自己的规则创建更好。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,