基本上我想做的是返回一个只读字符串(用户名),它依赖于导航属性user,只是将名字和姓氏连接在一起。
理想情况下,我只是分配一个值给OwnerUserId,然后使用导航属性来检索数据,如果这是可能的?我想保持模型类尽可能的干净。
任何想法?
<略模型/strong>
namespace Model
{
public class TicketReply
{
public int TicketReplyId { get; set; }
public string Title { get; set; }
/* ....more.... */
/* User ID FK */
public int OwnerUserId { get; set; }
/* User Navigation property */
[ForeignKey("OwnerUserId")]
[IgnoreDataMember]
public User User { get; set; }
/* Here is where I am stuck.... */
public string UserName
{
get { return User.FirstName + " " + User.LastName; }
set { }
}
}
}
*数据库初始化器* -只是为了给出一些上下文
private List<TicketReply> AddReplies(DbContext context)
{
var replies = new List<TicketReply>
{
new TicketReply { TicketReplyId = 1, TicketId = 1, CreatedAt = DateTime.Now, OwnerUserId = 1, Text = "My initial query"},
new TicketReply { TicketReplyId = 2, TicketId = 1, CreatedAt = DateTime.Now, OwnerUserId = 2, Text = "Test reply."},
new TicketReply { TicketReplyId = 3, TicketId = 2, CreatedAt = DateTime.Now, OwnerUserId = 1, Text = "Test query"}
};
replies.ForEach(status => context.TicketReplies.Add(status));
context.SaveChanges();
return replies;
}
谢谢亚瑟
大致(并根据记忆输入)
使其成为User
的一部分,例如……
public class User
{
[NotMapped] // or from code "modelBuilder.Entity<User>().Ignore(x => x.UserName);"
public string UserName
// your user name implementation
}
你不能只是分配OwnerUserId并期望它工作-用户会当你载入车票时,你就载入了。你也不用'OwnerUserId' in您的fk-entity - for search for User.
你可以用它来'设置'用户'它指向' -它被保存当你第一次做'SaveChanges'。
如…
var user = new User {First = ... Second=...};
db.Tickets.Add(new Ticket{ User = user, ...});
// or...
db.Tickets.Add(new Ticket{ OwnerUserId = ownerid, ...}); // to point to exisitng one you know exists
db.SaveChanges();
...sometime later on...
var ticket = new Ticket { OwnerUserId = ownerid };
// ticket.User is null - won't work
var ticket = // tickets query // db.Tickets.Where(x => x.TicketId == ticketid).FirstOrDefault();
var username = ticket.User.UserName; // now it works, you have your User loaded
或影响…
var user = db.Users.Where(x => x.UserId == ownerid).FirstOrDefault();
var username = user.UserName;