C# 每次我引用一个用户配置文件时,EF都会创建一个新的用户配置文件?
我的问题是,下面的代码不仅创建了一个ProtectedPassword(正如它应该创建的那样),而且还创建了插入其中的所有者,即使该所有者alread存在C# 每次我引用一个用户配置文件时,EF都会创建一个新的用户配置文件?,c#,asp.net-mvc,database,entity-framework,asp.net-mvc-4,C#,Asp.net Mvc,Database,Entity Framework,Asp.net Mvc 4,我的问题是,下面的代码不仅创建了一个ProtectedPassword(正如它应该创建的那样),而且还创建了插入其中的所有者,即使该所有者alread存在 UserProfile user = PublicUtility.GetAccount(User.Identity.Name); //gets an existing UserProfile ProtectedPassword pw = new ProtectedPassword(model.Name, user, model.Passwor
UserProfile user = PublicUtility.GetAccount(User.Identity.Name); //gets an existing UserProfile
ProtectedPassword pw = new ProtectedPassword(model.Name, user, model.Password);
ProtectedPassword.Create(pw);
因此,在创建了一个新的ProtectedPassword之后,我最终引用了一个新的UserProfile(除了一个新ID之外,它的值与前一个相同)
我已经处理这个问题好几个小时了,如果有人能帮助我,我将不胜感激
顺便说一句,我首先使用ASP.NETMVC4和EF代码
首先,实体:
受保护密码:
[Table("ProtectedPassword")]
public class ProtectedPassword : ProtectedProperty
{
[Required]
[MinLength(3)]
[MaxLength(20)]
public string Password { get; set; }
private ProtectedPassword()
{
}
public ProtectedPassword(string name, UserProfile owner, string password)
{
Name = name;
Owner = owner;
Password = password;
SubId = PublicUtility.GenerateRandomString(8, 0);
Type = ProtectedPropertyType.Password;
}
public static bool Create(ProtectedPassword pw)
{
try
{
using (MediaProfitsDb db = new MediaProfitsDb())
{
db.ProtectedPasswords.Add(pw);
db.SaveChanges();
return true;
}
}
catch
{
return false;
}
}
}
从ProtectedProperty继承:
public class ProtectedProperty
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int PropertyId { get; set; }
[Required]
public string SubId { get; set; }
public int Downloads { get; set; }
[Required]
public UserProfile Owner { get; set; }
[Required]
public string Name { get; set; }
[Required]
public ProtectedPropertyType Type { get; set; }
}
最后是UserProfile:
[Table("UserProfile")]
public class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
[Required]
public string UserName { get; set; }
[Required]
public string AffiliateId { get; set; }
public UserProfile Referer { get; set; }
[Required]
public int Balance { get; private set; }
[Required]
[EmailAddress]
public string PaypalEmail { get; set; }
public int AllTimeEarnings { get; set; }
}
我认为问题在于密码上的UserProfile对象没有附加到您用来插入的DbContext。这使EF认为这是一个新对象 尝试:
using (MediaProfitsDb db = new MediaProfitsDb())
{
db.UserProfiles.Attach(pw.UserProfile);
db.ProtectedPasswords.Add(pw);
db.SaveChanges();
return true;
}