首先在EF代码中映射FK关系

时间:2011-10-25 13:21:04

标签: entity-framework entity ef-code-first code-first

假设我有2个表,如:

Table:User
-------------
- UserId [pk]
- UserName
- StatusId [fk]

Table: Status
-------------
- StatusId [pk]
- StatusDescription

现在让我们说我想在我的poco中显示StatusDescription:

public class User
{
int UserId{get;set;}
string UserName{get;set;}
int StatusId{get;set;}
string StatusDescription{get;set;}
}

是否可以在EF中映射?或者我只能通过以下方式实现这一目标:

public class User
{
int UserId{get;set;}
string UserName{get;set;}
Status UserStatus{get;set;}
}

有什么想法吗?提前谢谢。

2 个答案:

答案 0 :(得分:1)

如果不使用数据库视图,您只能实现第二种解决方案,但可以使用非映射StatusDescription属性来改进它:

public class User
{
    public int UserId { get;set; }
    public string UserName { get;set; }
    public Status UserStatus { get; set; }

    [NotMapped]
    public string StatusDescription 
    {
        get
        {
            return UserStatus.StatusDescription;
        }

        set
        {
            UserStatus.StatusDescription = value;
        }
    }
}

答案 1 :(得分:0)

您可以创建一个扩展方法来生成具有任何复杂属性的POCO对象。

  public static class UserExtensions
    {
        public static UserPoco ToPoco(this User user)
        {
            UserPoco poco = new UserPoco();
            poco.UserId = user.UserID;
            poco.UserName = user.UserName;
            poco StatusDescription = user.Status.StatusDescription;
            return poco;
        }
        public static UserPoco ToPoco(this User user,ExtraObjectToInclude object)
        {

            //....you can include other objects to construct something complex.
        }
    }

您需要向User实体内的Status实体添加导航链接。您的Poco对象不需要与一个实体完全匹配。它们还可以包含来自多个实体的更多信息。