我有一个问题,当我在多对一关系的多方面删除记录时,它可以工作,但在下一个数据库事务中,我收到一个异常,说我刚刚删除的实体未找到(例如,当尝试添加另一个链接时)说它找不到我刚刚删除的那个)。我在数据库中验证了记录正在被删除。
我在 Hibernate 中使用 Spring MVC 和 Spring Data JPA。我有一个用户类和一个 NewsLink 类。一个用户可以有很多新闻链接,我想删除其中一个新闻链接。我只是通过构建一个简单的应用程序来学习如何自己使用 Spring 框架。所以这对我来说很新。我感谢任何帮助!
用户实体类
@Entity
@Table(name = "users")
public class User implements Serializable{
@Id
@Column(name = "idusers")
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
....
@OneToMany(mappedBy="user", fetch= FetchType.EAGER, cascade=CascadeType.ALL, orphanRemoval= true)
private Set<NewsLink> newsLink;
Run Code Online (Sandbox Code Playgroud)
NewsLink 实体类
@Entity
@Table(name = "news_links")
public class NewsLink implements Serializable{
@Id
@Column
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(insertable=false, updatable=false)
private Long idusers;
....
@ManyToOne
@JoinColumn(name="idusers")
private User user;
Run Code Online (Sandbox Code Playgroud)
这是正在执行删除的服务类中的方法。我认为这是我做错的部分:
@Override
@Transactional
public User deleteNewsLink(int …Run Code Online (Sandbox Code Playgroud) 我想我在asp.net mvc 4中有一个关于身份验证的简单问题.我不清楚的一件事是我可以将用户数据添加/序列化到授权cookie中.将用户数据放入身份验证cookie与将用户数据添加到会话有什么好处/权衡?我是否甚至需要在身份验证cookie中为用户添加任何独特内容?我应该序列化所有用户数据并将其放入cookie中,而不是使用会话来存储用户数据吗?
我的应用程序非常简单,没有任何角色.我只是想确保它在必要时可以很好地扩展.
现在,我只是将用户的电子邮件放在身份验证cookie中,并将用户对象添加到会话中.我正在使用以下代码来授权用户:
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
1,
user.Email,
DateTime.Now,
DateTime.Now.AddMinutes(15),
false,
user.Email); // adding the user email in the authTicket
string encTicket = FormsAuthentication.Encrypt(authTicket);
HttpCookie faCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
Session["User"] = user; //adding user data to session
Response.Cookies.Add(faCookie);
return RedirectToAction("Summary", "Account");
Run Code Online (Sandbox Code Playgroud)
我非常感谢任何见解.谢谢!
我好像被卡住了.我有一个asp.net mvc 4应用程序,我想从服务类发送电子邮件.服务类位于与解决方案中的mvc项目分开的C#库项目中.我想将电子邮件配置设置在从配置文件调用的单独文件中.以下是否应该进入mvc项目中的web.config或在服务项目中创建app.config文件?
<system.net>
<mailSettings>
<smtp configSource="MailSettings.config" />
</mailSettings>
</system.net>
Run Code Online (Sandbox Code Playgroud)
然后我在一个名为MailSettings.config的单独文件中有这个:
<smtp from="abc@email.com">
<network host="smtp.server.com" port="587" userName="abc@email.com" password="password" enableSsl="true" />
</smtp>
Run Code Online (Sandbox Code Playgroud)
我尝试使用system.net内容为服务项目创建一个app.config文件,但是当我尝试时,邮件设置总是为null:
MailSettingsSectionGroup settings = (MailSettingsSectionGroup)ConfigurationManager.GetSection("system.net/mailSettings");
SmtpClient SmtpServer = new SmtpClient(settings.Smtp.Network.Host); //get null exception for settings.Smtp.Network.Host)
Run Code Online (Sandbox Code Playgroud)
此外,我已尝试在app.config文件中包含邮件设置,以排除MailSettings.config文件是问题,并仍然生成空指针.
我尝试了一个从web.config文件中访问它的示例,如下所示:
Configuration configurationFile = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
MailSettingsSectionGroup mailSettings = configurationFile.GetSectionGroup("system.net/mailSettings") as MailSettingsSectionGroup;
Run Code Online (Sandbox Code Playgroud)
在服务类中虽然WebConfigurationManager不在上下文中,所以也是如此Request.ApplicationPath.因此,如果我必须从web.config文件中获取它,我是否必须将http请求对象传递给服务类?这似乎是一个坏主意.
我是Entity Framework和.NET的新手,正在开发构建MVC 4应用程序.我想我应该创建数据库上下文实例的位置有点困惑.在我的应用程序中,我有几个层:Web,业务,数据访问,数据库(这些是每个单独的项目).在数据访问层中,每个表有一个类.我看到的一个例子显示了在数据访问层内的每个方法内创建上下文(我可能误解了它).当将多个表更新为业务逻辑的一部分时,这似乎不太实际.似乎在每个数据访问层方法中创建新上下文的结果是这个错误:An entity object cannot be referenced by multiple instances of IEntityChangeTracker更新多个表时.
那么在业务层方法中创建上下文然后将其传递给数据访问层方法是否可以接受?或者有更好的方法吗?
这样的情况来自业务层的上下文:
public User RetrieveUserById(int id, MyDbContext ctx)
{
User findUser = ctx.Users.Find(id);
return findUser;
}
Run Code Online (Sandbox Code Playgroud)
而不是在数据访问层方法中创建上下文:
public User RetrieveUserById(int id)
{
var ctx = new MyDbContext();
User findUser = ctx.Users.Find(id);
return findUser;
}
Run Code Online (Sandbox Code Playgroud)
我很感激帮助!
我正在试图弄清楚如何验证用户在注册时输入了匹配的密码.我可以使用MVC 4数据注释内置的任何内容,或者是创建自定义验证属性的唯一途径吗?
如果我必须创建自定义验证属性,如何访问密码属性(假设我将注释放在确认密码属性上)?此外,是否有任何常用的库用于此类验证?
这就是我在自定义验证属性的开头所拥有的,只是不知道如何访问密码属性:
public class CrossFieldValidationAttribute : ValidationAttribute
{
public override bool IsValid(object value) //how do I get the other value in here?
{
//validation logic here
return base.IsValid(value);
}
}
Run Code Online (Sandbox Code Playgroud)
我感谢任何帮助!
我正在使用ASP.NET MVC 4和Entity Framework 5.我使用模型第一种方法来生成数据库.在我的应用程序中,我有一个运行的日志表和一个鞋表.用户可以拥有与正在运行的日志条目相关联的0或1双鞋.所以这似乎是一个0..1到很多关系,这就是我在模型中设置它的方式.当我context.SaveChanges()添加一个没有任何与之相关的鞋子的新条目时,我收到此错误:
The INSERT statement conflicted with the FOREIGN KEY constraint \"FK_ShoeLogEntry\".
一旦我选择一双鞋作为日志条目,它就可以正常工作.那么如何正确设置关系,以便日志条目可以为鞋子设置空值?我已粘贴在下面的代码中:
代码我用来添加一个新条目
le.ActivityType = ctx.ActivityTypes.Find(le.ActivityTypesId);
le.User = ctx.Users.Find(le.UserUserId);
le.Shoe = ctx.Shoes.Find(le.ShoeShoeId); //ShoeShoeId is null if nothing picked
ctx.LogEntries.Add(le);
ctx.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
我曾尝试检查ctx.Shoes.Find(le.ShoeShoeId)返回null,设置le.Shoe到null和le.ShoeShoeId到null和-1和没有工作.
我试着在下面粘贴相关代码,但这对我来说是个新手.所以我可以在必要时添加更多.我非常感谢任何帮助!
外键设置
-- Creating foreign key on [ShoeShoeId] in table 'LogEntries'
ALTER TABLE [dbo].[LogEntries]
ADD CONSTRAINT [FK_ShoeLogEntry]
FOREIGN KEY ([ShoeShoeId])
REFERENCES [dbo].[Shoes]
([ShoeId])
ON DELETE NO ACTION ON UPDATE NO ACTION; …Run Code Online (Sandbox Code Playgroud)