EF,操作两张相关联的表,一对一的关系时,出现更新条目出错,请问谁知道怎么解决这个问题,我查了资料,说要标识主外键,我引入命名空间System.ComponentModel.DataAnnotations但是,点不出[ForeignKey]
public JsonResult EditBaiDuAutoPush(Application.Admin.Dto.AutoPushDto dto) { if (dto.Id > 0) { var auto = autoPushService.Get(dto.Id); if (auto != null) { auto.Name = string.IsNullOrEmpty(dto.Name) ? "" : dto.Name.Trim(); auto.Remark = string.IsNullOrEmpty(dto.Remark) ? "" : dto.Remark.Trim(); auto.IntervalTime = dto.IntervalTime; auto.ExpiredDateTime = dto.ExpiredDateTime; autoPushService.Modify(auto, this.WorkContext.CurrentUser); var content = contentService.Get(dto.ContentId); if (content != null && content.Id > 0) { content.Content = string.IsNullOrEmpty(dto.Content) ? "" : dto.Content.Trim(); contentService.Modify(content, this.WorkContext.CurrentUser); } } } var data = this.GetAutoPushTrueState().OrderByDescending(e => e.Id).ToList(); var model = new GridModel<Application.Admin.Dto.AutoPushDto> { Data = data, Total = data.Count() }; return new JsonResult { Data = model, JsonRequestBehavior = JsonRequestBehavior.AllowGet }; }
其实问题就是。里面更新的时候,时间那列保存出了问题。。
是不是字段类型不对?
啥意思?可以说具体点嘛?谢谢哟。。。
缺少dll?
我引入了dll
是不是要先后顺序?
什么先后?
你T4模板生成的实体类中有对应的导航属性吗,你看下~~~
你可以截图给我看吗?我不懂这个,呵呵。。。
@魔女小溪: 例如我现在这个.tt下面的这些.cs文件,都是根据数据库生成的实体类,一个实体类,对应一个表,你进去看看,里面的属性,就是列名,看下最下面有没有导航的属性,所谓导航属性,就是那个属性前面的类型是其他实体类,这些属性就是外键了。你看看
@Dunn:
#region Primitive Properties /// <summary> /// 推送名 /// </summary> [DataMember] [DisplayName("推送名")] public virtual string Name { get; set; } /// <summary> /// 描述 /// </summary> [DataMember] [DisplayName("描述")] public virtual string Remark { get; set; } /// <summary> /// 推送内容Id /// </summary> [DataMember] [DisplayName("内容Id")] public virtual int ContentId { get; set; } /// <summary> /// 间隔时间 /// </summary> [DataMember] [DisplayName("间隔时间")] public virtual int IntervalTime { get; set; } /// <summary> /// 过期时间,intervalTime为0,按过期时间推送 /// </summary> [DataMember] [DisplayName("过期时间")] public virtual System.DateTime ExpiredDateTime { get; set; } #endregion
@Dunn:
#region Primitive Properties /// <summary> /// 推送内容 /// </summary> [DataMember] [DisplayName("推送内容")] public virtual string Content { get; set; } /// <summary> /// 内容过期时间 /// </summary> [DataMember] [DisplayName("内容过期时间")] public virtual System.DateTime ExpiredDateTime { get; set; } #endregion
这是主表,刚刚那个是从表
@Dunn: 直接用的是主表的Id
@魔女小溪: 你看看.edmx那个文件,打开那个模型窗口,看下那些表是否有导航属性
@Dunn: 好,我看看
@Dunn: 我可以问下.edmx那个文件在哪个地方吗?呜呜呜。。。
@Dunn: 说实在话,这个程序我都还没摸清楚,里面的东西也是我首次接触,又没人带我。。所以,哎。。。。
@魔女小溪: 额....你上面的那两个主表和从表的文件是你自己手写的吗?你把项目截图我看看吧,尽量舒展开
@Dunn: 上面那两张表,我不知道之前那些人是怎么弄出来的,我来了就已经存在了。。。所以,就留 了bug给我。。。
@魔女小溪: 你看看Model那层里 有么有.edmx后缀的
@Dunn: 呵呵,找到了,直接查找后缀名那个文件就可以了,我先看看啊
@Dunn:
@魔女小溪: 你这两个表没有导航属性,也就是两个表之间没有关系,也就是两个表不关联...
@Dunn: 这两张表的基表是:
@Dunn: 你的意思是,导航就是主外键关系吧?我看了一下数据库,确实是没有这个关系的,但是,同时更新这两张表的时候,就是报错
@魔女小溪: 没有导航属性,相当于无法直接通过EF进行跨表操作,你数据库的表有主外键的吗
@Dunn: 木有。。。但是,我添加可以呀!添加的时候,就是对两张表做操作,我是这么觉得的,因为添加所以在上下文不存在实体,但是,修改的时候,已经存在了,所以,才会报错,现在的问题就是,怎么能够让它去除上下文中的实体。。。我刚刚接触EF,不能熟练操作。。。
@魔女小溪: 你修改的时候,可以获取到实体哦,你要修改他的Status,然后改完再savechanges(),试下,我也接触ef不久
@Dunn: 哦。
@Dunn: 谢谢你 呀!哎。。。虽然还没解决,我会努力找原因的。。。
@魔女小溪: 额...加油啊