在EF 4.0中更新mappin引用

时间:2014-04-14 13:06:17

标签: c# entity-framework setter

首先,我不确定它是否被称为mappin引用。但是,我有两个包含重要信息的表,其中有一个表。它如下:

  CREATE TABLE Customer (
      ID INT NOT NULL IDENTITY(1,1), -- PK
      Number VARHCAR(255) NOT NULL,
  ) ....

  CREATE TABLE Category (
      ID INT NOT NULL IDENTITY(1,1), -- PK
      Type INT NOT NULL,             -- Defines the different category types
      Number VARCHAR(50) NOT NULL,
      Name VARCHAR(255) NOT NULL
  ) ....

  CREATE TABLE CustomerCategories (
      FK_Customer INT NOT NULL, -- References customer
      FK_Category INT NOT NULL  -- References category
  ) .... unique (FK_Customer, FK_Category)

在此模型中,客户可以有多个类别(只要category.Type不同)。

IT可能如下所示:

客户:

ID |编号

3 | 10000

分类

ID |类型|编号|名称

52 | 1 | PRIO_H |高

53 | 2 | REG |南部地区

CustomerCategories:

FK_Customer | FK_Category

3 | 52

3 | 53

在我的c#应用程序中,我将所有类别放在网格中,用户可以根据下拉列表更改不同的类别类型。

我使用EF4对象上下文。

在我的应用程序中,我的客户模型就像这样

  interface ICustomer 
  {
     int ID {get;}
     string Number {get;}
     Category Priority {get;set;}
     Category Region {get;set;}
  }

我的实施

 partial class Customer : ICustomer
 {
     ID... // Not important right now
     Number... // Not important right now
     public Category Priority
     {
         get { return this.CustomerCategory.Where(c => c.Type == 1).Select(c2 => c2.Category).FirstOrDefault<Category>(); } // The getter works
         set {}
     }
 }

我在设置值方面遇到了问题,我试过了

set {this.CustomerCategory.Where(c => c.Type == 1).Select(c2 => c2.Category) == value;}

这个说:不能将Model.Category类型转换为IEnumerable

所以我试图通过

显式选择值
set {this.CustomerCategory.Where(c => c.Type == 1).Select(c2 => c2.Category).FirstOrDefault<Category>() == value;}

现在它说:作业的左侧必须是变量,属性或索引器。

是否有人知道如何使用EF4和对象上下文更新此类引用?

谢谢!

1 个答案:

答案 0 :(得分:0)

您试图为IQueryable的结果分配值。 这应该有效:

set 
{
    var cc = context.CustomerCategory.Where(c => c.Type == 1).FirstOrDefault();
    if (cc!=null)
    {
        cc.Category =  value;
        //or cc.CategoryId = value.Id; if you have foreign keys exposed
        //context.SaveChanges(); if you need changes saved in the database immediately.
    }
}