首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何首先使用实体框架(EF) 4.1代码将一个类的多个属性绑定到另一个类,以便与Upshot.js一起使用?

如何首先使用实体框架(EF) 4.1代码将一个类的多个属性绑定到另一个类,以便与Upshot.js一起使用?
EN

Stack Overflow用户
提问于 2012-05-18 23:23:11
回答 1查看 1.2K关注 0票数 1

我有一个场景,需要首先使用EntityFramework4.1代码将两个属性从一个类绑定到另一个类。(作为参考,Upshot.js正在使用该模型供使用Knockout.js 2.1的单个页面应用程序使用)

通常情况下,我会做如下的事情:

代码语言:javascript
复制
    public class Person
    {
        [Key]
        public int PersonId { get; set; }

        public string FirstName { get; set; }
        public string LastName { get; set; }

        public Address HomeAddress { get; set; }
        public Address OfficeAddress { get; set; } 
    }

    public class Address
    {
        [Key]
        public int AddressId { get; set; }

        public string StreetAddress { get; set; }
        public string City { get; set; }
        public string State { get; set; }
        public string ZipCode { get; set; }
    }

这允许HomeAddress和OfficeAddress同时引用Address类的实例。

请注意,这不是我的真实数据模型。这只是为了说明的目的。在现实生活中,我可能会使用ICollection。不幸的是,对于这种特殊情况,这是不可行的,我确实需要维护从一个类到另一个类的多个引用。

在这种特殊情况下,一个人也有可能在没有定义任何地址的情况下生存。地址也有可能在没有人的情况下存在。(如前所述,这个数据模型只是一个例子。)

虽然这是正确编译的,我甚至可以创建和保存数据,但是当它试图使用这个模型时,结果会很痛苦地抱怨。

它提供了一个(内部)异常,如下所示:

代码语言:javascript
复制
{"Unable to retrieve association information for association 'KnockoutTest.Models.Person_HomeAddress'. Only models that include foreign key information are supported. See Entity Framework documentation for details on creating models that include foreign key information."}

所以..。我试图在DbContext类上设置外键信息,如

代码语言:javascript
复制
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Person>()
    .HasOptional(m => m.HomeAddress);

    modelBuilder.Entity<Person>()
    .HasOptional(m => m.OfficeAddress);
}

不joy!这仍然给了我同样的例外。

我不知道如何设置外键关联,以便一个类上的多个属性可以引用另一个类--至少在某种程度上不会让结果满意,暂时停止抱怨。

我做错了什么,我该如何解决?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-19 11:55:38

您只需在模型类中引入标量外键属性:

代码语言:javascript
复制
public class Person
{
    [Key]
    public int PersonId { get; set; }

    public string FirstName { get; set; }
    public string LastName { get; set; }

    [ForeignKey("HomeAddress")]
    public int? HomeAddressId { get; set; }
    public Address HomeAddress { get; set; }

    [ForeignKey("OfficeAddress")]
    public int? OfficeAddressId { get; set; } 
    public Address OfficeAddress { get; set; } 
}

属性必须为空(int?),因为您的关系是可选的(person可以不带地址)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10660932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档