0

基本上我想要做的是返回一个只读字符串(用户名),它取决于导航属性 User 并且只是将名字和姓氏连接在一起。

理想情况下,我只需为 OwnerUserId 分配一个值,然后在可能的情况下使用导航属性检索数据?我想保持模型类尽可能干净。

有任何想法吗?

POCO 模型

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 { }
    }

    }
}

* DB 初始化程序* - 只是为了提供一些上下文

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;
}

谢谢亚瑟

4

1 回答 1

0

大致(并从记忆中输入)
使其成为 的一部分User,例如..

public class User
{
    [NotMapped] // or from code  "modelBuilder.Entity<User>().Ignore(x => x.UserName);"
    public string UserName
    // your user name implementation
}

您不能只分配 OwnerUserId 并期望它起作用 - 加载 Ticket 时将加载用户。此外,您不要在 fk-entity 中使用“OwnerUserId”来搜索用户。

您可以使用它来“设置”用户“它指向” - 它在您第一次执行“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;
于 2013-04-01T19:26:22.837 回答