我正在使用WebMatrix和EntityFramework。
在我的数据库中我有一个用户表,在我们的业务逻辑中,用户可以创建或更新另一个表的内容,所以我的模型中的用户类是这样的:
[Table("Users")]
public class User
{
[Key]
public int UserId { get; set; }
[MaxLength(50), MinLength(5), Required]
public string UserName { get; set; }
[MaxLength(16), MinLength(8), Required]
public string Password { get; set; }
[MaxLength(50), Required]
public string Name{ get; set; }
[MaxLength(50), Required]
public string LasName1{ get; set; }
[MaxLength(50), Required]
public string LasName2{ get; set; }
public string token { get; set; }
public DateTime CreatedDateTime { get; set; }
public DateTime UpdatedDateTime { get; set; }
[InverseProperty("CreatedBy")]
public virtual ICollection<Device> CreatedDevices {get; set;}
[InverseProperty("UpdatedBy")]
public virtual ICollection<Device> UpdatedDevices {get; set;}
[InverseProperty("CreatedBy")]
public virtual ICollection<Cluster> CreatedClusters {get; set;}
[InverseProperty("UpdatedBy")]
public virtual ICollection<Cluster> UpdatedClusters {get; set;}
[InverseProperty("CreatedBy")]
public virtual ICollection<Region> CreatedRegions {get; set;}
[InverseProperty("UpdatedBy")]
public virtual ICollection<Region> UpdatedRegions {get; set;}
}
例如,我的Region类看起来像这样:
[Table("Regions")]
public class Region
{
[Key]
public int RegionId { get; set; }
[MaxLength(50), MinLength(5), Required]
public string Name{ get; set; }
public virtual ICollection<Cluster> Clusters { get; set; }
public DateTime CreatedDateTime { get; set; }
public DateTime UpdatedDateTime { get; set; }
public Usuario CreatedBy { get; set; }
public Usuario UpdatedBy { get; set; }
}
这将在数据库中的实体之间创建必要的关系。现在我的主要疑问是,在我的Cluster表中有一个CreatedBy_UserId,所以当我在表中插入或更新一个条目时,我是否必须传递一个User对象?我说的是这样的话
Cluster cluster = new Cluster()
{
RegionId = regionId,
CreatedDateTime = createdDateTime,
UpdatedDateTime = updatedDateTime,
CreatedBy = currentUser,
UpdatedBy = currentUser
};
或者如何将表示外键的int传递给表?
答案 0 :(得分:1)
如果模型中没有外键属性,则是,您需要设置导航属性以建立关系。您只需要确保currentUser
附加到上下文 - 通过从DB加载或手动附加。否则EF也会创建新用户。一个例子是:
using (var context = new MyContext())
{
context.Users.Attach(currentUser);
Cluster cluster = new Cluster()
{
RegionId = regionId,
CreatedDateTime = createdDateTime,
UpdatedDateTime = updatedDateTime,
CreatedBy = currentUser,
UpdatedBy = currentUser
};
context.Clusters.Add(cluster);
context.SaveChanges();
}
SaveChanges
将创建一个INSERT
语句,其中包含正确的外键值(等于currentUser.UserId
)。