首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

多层模式下的多对多关系怎么体现

2011-12-30 
多层模式下的多对多关系如何体现?┌───┐┌─────┐┌───┐││1*││*1│││Role│------ │Relation│ ------│Module││

多层模式下的多对多关系如何体现?
┌───┐               ┌─────┐               ┌───┐
│             │1           *│                     │*           1│             │
│   Role   │------> │   Relation   │ <------│Module│
│             │               │                     │               │             │
└───┘               └─────┘               └───┘
      用户                               关系                               模块
--------------------------------------------------
描述:
            用户权限管理
--------------------------------------------------
表结构:
            Role(RID,RName,RSummary……)                 用户表
            Relation(RPID,RID(FK),MID(Fk))         关系映射表
            Module(MID,MName……)                   系统管理模块表
--------------------------------------------------
架构模式:
            Web、BLL、IDal、Factory、Dal、Model
--------------------------------------------------
主问题:
            如何在显示所有用户(Role)的同时通过关系表(Relation)
            也显示每个用户的多个系统管理模块(Module)名称?
           
            在多对多的模式下Role、Relation、Module   表的
            Model层、DAL层怎么写,怎么建立这种关系?
--------------------------------------------------
附问题:
            在组合查询中,组合条件与SQL语句分别在BLL层、
            DAL层中怎么体现?
--------------------------------------------------
语言:(C#/Net   1.1)  
--------------------------------------------------
其他:学习PetShop中……

请大虾帮忙!跪谢!

[解决办法]
学习中
[解决办法]
Learning
[解决办法]
学习ing
[解决办法]
MARK
[解决办法]
学习……
[解决办法]
这个好办,用户list页面的时候,可以多显示2个功能按钮,一个是关系的设置,一个是模型的设置,
这3者之间的确是相互联系的,但是关键还是两两相连,所以只要处理好两两的关心就可以了。
[解决办法]
可以用试图嘛,也不一定每个model都要对应一个dal

[解决办法]
顶!
[解决办法]
如何在显示所有用户(Role)的同时通过关系表(Relation)
也显示每个用户的多个系统管理模块(Module)名称?



在多对多的模式下Role、Relation、Module 表的
Model层, 怎么建立这种关系?
=====================================================
1,
实体关系模型(数据库)中的关系(外健)在实体对象模型(内存)中是通过 引用 来表示的

2,
对于 多对多 关系,大概分两种情况
a. 这个关系,不需要独立成一个“关系实体”,直观上看,数据库中这张中间关系表,一般只有两个外键列,那么实体对象模型不是需要一个与之对应的 Relation 类, Role 与 Module 之间是通过 引用 来表现的,而且这个“多”是通过“一”的一个集合表现的,这刚好与数据库相反(数据库通过在“多”那个表的建立外健表现),如这样定义
public Role {
// ...
// public int ID {
// get;
// set;
//}
// ...

private IList _modules; // .net 2.0 中,建议使用泛型 IList <Module>
public IList Modules {
get { return _modules; }
}
}

public Module {
// ...
// public int ID {
// get;
// set;
//}
// ...

private IList _roles;
public IList Roles {
get { return _roles; }
}
}

b. 如果你需要在这个关系上附加一些其他的信息(成为一个Role-Module的明细表),那么就需要设计一个类,不妨称为 RoleModuleDetail 来表示,实体对象模型中需要拆成了两个一对多来实现

public Role {
// ...
// public int ID {
// get;
// set;
//}
// ...

private IList _roleModuleDetails; // .net 2.0 中,建议使用泛型 IList <RoleModuleDetail>
public IList RoleModuleDetails {
get { return _roleModuleDetails; }
}
}

public RoleModuleDetail {
// ...
// public int ID {
// get;
// set;
//}
// ...

private Role _role;
public Role Role {
get { return _role; }
}

private Module _module;
public Module Module {
get { return _module; }
}
}

public Module {
// ...
// public int ID {
// get;
// set;
//}
// ...

private IList _roleModuleDetails; // .net 2.0 中,建议使用泛型 IList <RoleModuleDetail>
public IList RoleModuleDetails {
get { return _roleModuleDetails; }
}
}


在多对多的模式下Role、Relation、Module 表的
DAL层怎么写,怎么建立这种关系?
================================
3.
关于这个加载数据的问题,讨论起来实在太庞大了,涉及到方方面面,如是否使用连接,何种连接(内、外连接),是否延时加载,
比较简单的就是按表模块,一个个Model的加载,
希望其他大虾,给出好的建议

4.
在组合查询中,组合条件与SQL语句分别在BLL层、
DAL层中怎么体现?
==============
原则上设计, UI, BLL 都不应该有 SQL 语句痕迹的出现, 而是用Model的属性表示,并加上自定义的一套查询参数组合模式,传递到 DAL, 由 DAL 构造 SQL 语句(或者由存储过程实现)

查询参数组合模式
=========
比如,我定义一个可以表示三个关联对象的类 FilterTriplet,
public FilterTriplet {
public string PropertyName { //表示Model属性
get;
set;
}

public string PropertyValue { //表示要匹配的值
get;
set;
}

public string Operator { //表示运算符
get;
set;
}

}


热点排行