MVC中操作数据库

ztmsimon 2014-11-04 09:27:20
我有两张表,A有20个字段,B有30个字段,A中的字段在B中都有,B是我在MVC中绑定的实体模型,我在新增/修改B的时候,A表也需要新增/修改,这个时候应该如何处理啊?
...全文
230 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ztmsimon 2014-11-04
  • 打赏
  • 举报
回复
引用 9 楼 sp1234 的回复:
EF只是一个DAL而已。而你改变两个业务数据集,这是业务逻辑的事情,也就是在你的EF“之上”的调用程序应该写出来的流程。不要指望着一定在EF中去实现所有业务触发。
是不是意思就是说我的想法其实是错误的,应该编写业务代码来处理另外的表的更新,而不是在这个EF中想办法去更新其他的表... 谢谢啊~我这好像明白了的样子哦~
  • 打赏
  • 举报
回复
引用 6 楼 ztmsimon 的回复:
如果开始软件使用的是ADO直接操作,也好搞,关键使用的数据库实体模型,这个就不知道改如何处理了。 但是触发器确实是个好方法~!
EF只是一个DAL而已。而你改变两个业务数据集,这是业务逻辑的事情,也就是在你的EF“之上”的调用程序应该写出来的流程。不要指望着一定在EF中去实现所有业务触发。
完美的神速 2014-11-04
  • 打赏
  • 举报
回复
引用 6 楼 ztmsimon 的回复:
如果开始软件使用的是ADO直接操作,也好搞,关键使用的数据库实体模型,这个就不知道改如何处理了。 但是触发器确实是个好方法~!
其实你完全可以使用事务。 asp.net总提供了transactionscope类,可以将代码块变成事务,你可以执行两个操作,将这两个操作的放在transactionscope中。

using (TransactionScope tran = new TransactionScope())
            {
                //操作放在此处
                tran.Complete();//提交事务
            }
wangweimutou 2014-11-04
  • 打赏
  • 举报
回复
ModelB B=new ModelB(); B.x=1; B.y=2; B.z=3; ModelA A=new ModelA(); A.x=B.x; A.y=B.y; int flag=xxxRepository.TransSave(A,B); //注意对象传入TransSave方法后,你再拼接成List<strSql>,利用本地事务提交就行呢 ,参考代码: /// <summary> /// 执行多条SQL语句,实现数据库事务。 /// </summary> /// <param name="SQLStringList">多条SQL语句</param> public static int ExecuteSqlTran(List<String> SQLStringList) { using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; SqlTransaction tx = conn.BeginTransaction(); cmd.Transaction = tx; try { int count = 0; for (int n = 0; n < SQLStringList.Count; n++) { string strsql = SQLStringList[n]; if (strsql.Trim().Length > 1) { cmd.CommandText = strsql; count += cmd.ExecuteNonQuery(); } } tx.Commit(); return count; } catch { tx.Rollback(); return 0; } } }
ztmsimon 2014-11-04
  • 打赏
  • 举报
回复
如果开始软件使用的是ADO直接操作,也好搞,关键使用的数据库实体模型,这个就不知道改如何处理了。 但是触发器确实是个好方法~!
qq_19920727 2014-11-04
  • 打赏
  • 举报
回复
最简单的 方法 就是 做2次修改 也可以使用 事务 推荐事务 同事完成 或者一起回滚
qq_19920727 2014-11-04
  • 打赏
  • 举报
回复
MVC 只是一个框架 和操作数据库没关系的 跟你以前的asp 操作数据库一样 你可以将控制器 看成一个特殊的类 之前怎么操作数据库 现在就怎么操作 可以用EF LINQ TO SQL 也可以SQL语句去 都可以
ztmsimon 2014-11-04
  • 打赏
  • 举报
回复
关键是A这张表已经在很多软件与系统中存在了,A表的结构是不能改的啊,我们现在新做的,是需要把A表的每次修改记录都记录,所以才想到用一个与A表相同的B表来做这个事情啊。 如果一开始设计就是很好,就根本不存在两张表的事情了的啊。 谢谢 xdashewan ~! 我来试试~!
moonwrite 2014-11-04
  • 打赏
  • 举报
回复
我有两张表,A有20个字段,B有30个字段,A中的字段在B中都有 首先 数据库的设计不合理了~!!!!!这才是问题的关键!!!!!!!!!!1 通俗地理解三个范式,对于数据库设计大有好处。在数据库设计中,为了更好地应用三个范式,就必须通俗地理解   三个范式(通俗地理解是够用的理解,并不是最科学最准确的理解):   第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解;   第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;   第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。   没有冗余的数据库设计可以做到。但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降   低范式标准,适当保留冗余数据。具体做法是:在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理   数据模型设计时考虑。降低范式就是增加字段,允许冗余。 你已经严重地破坏了 第三范式 了 应该设计成 A20字段 B10个字段 举个例子,用户登录表,与用户资料表 用户资料表扩展用户登录表就可以了 用户登录表 UserID LoginName LoginPassword 用户资料表(没有必要把上面的复制下来) UserID(这个是主键 同时也是外键,这样就和上面是一一对应了,你不想一一对应 那么改变一下关系) 出生日期 职业 爱好 用触发器 太难调试了 如果两个表都要更新 用事务 using (TransactionScope scope = new TransactionScope()) { .... scope.Complete(); }
xdashewan 2014-11-04
  • 打赏
  • 举报
回复
可以在B表上建个触发器更新表A

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧