2011-08-21 100 views
1

是否有指定的外鍵使用實體框架表的方法嗎?實體框架定義了外鍵

表1:

classDate 
classDate_Id(pk) 
classDate_reference 
classDate_start 
class_Id 

表2:

class_Id(pk) 
class_Name 
classs_description 

這是不可能的我已經使用數據庫第一(具有EDMX模型文件)的方法下表規範在表創建時指定class_id作爲外鍵(classdate)。實體表(classdate)本身以class_Id作爲列(普通)而不是外鍵。我想指定這個作爲外鍵。所以..是否可以指定爲外鍵。

這是我在tsgentitesmodel.designer.cs找到的代碼。我需要在這裏改變嗎?

public partial class tsgEntities : ObjectContext 
    { 
    /// <summary> 
    /// No Metadata Documentation available. 
    /// </summary> 
    public ObjectSet<classdate> classdates 
    { 
     get 
     { 
      if ((_classdates == null)) 
      { 
       _classdates = base.CreateObjectSet<classdate>("classdates"); 
      } 
      return _classdates; 
     } 
    } 
    private ObjectSet<classdate> _classdates; 

    /// <summary> 
    /// No Metadata Documentation available. 
    /// </summary> 
    public ObjectSet<@class> classes 
    { 
     get 
     { 
      if ((_classes == null)) 
      { 
       _classes = base.CreateObjectSet<@class>("classes"); 
      } 
      return _classes; 
     } 
    } 
    private ObjectSet<@class> _classes; 
} 

    /// <summary> 
    /// Deprecated Method for adding a new object to the classdates EntitySet. Consider using the .Add method of the associated ObjectSet&lt;T&gt; property instead. 
    /// </summary> 
    public void AddToclassdates(classdate classdate) 
    { 
     base.AddObject("classdates", classdate); 
    } 

    /// <summary> 
    /// Deprecated Method for adding a new object to the classes EntitySet. Consider using the .Add method of the associated ObjectSet&lt;T&gt; property instead. 
    /// </summary> 
    public void AddToclasses(@class @class) 
    { 
     base.AddObject("classes", @class); 
    } 

,我發現下面的代碼,做我需要在這裏更改

public partial class classdate : EntityObject 
{ 
    #region Factory Method 

    /// <summary> 
    /// Create a new classdate object. 
    /// </summary> 
    /// <param name="classDate_End">Initial value of the classDate_End property.</param> 
    /// <param name="classDate_Id">Initial value of the classDate_Id property.</param> 
    /// <param name="classDate_Reference">Initial value of the classDate_Reference property.</param> 
    /// <param name="classDate_Start">Initial value of the classDate_Start property.</param> 
    /// <param name="class_Id">Initial value of the class_Id property.</param> 
    public static classdate Createclassdate(global::System.String classDate_End, global::System.Int32 classDate_Id, global::System.String classDate_Reference, global::System.String classDate_Start, global::System.Int32 class_Id) 
    { 
     classdate classdate = new classdate(); 
     classdate.classDate_End = classDate_End; 
     classdate.classDate_Id = classDate_Id; 
     classdate.classDate_Reference = classDate_Reference; 
     classdate.classDate_Start = classDate_Start; 
     classdate.class_Id = class_Id; 
     return classdate; 
    } 

    [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)] 
    [DataMemberAttribute()] 
    public global::System.Int32 class_Id 
    { 
     get 
     { 
      return _class_Id; 
     } 
     set 
     { 
      Onclass_IdChanging(value); 
      ReportPropertyChanging("class_Id"); 
      _class_Id = StructuralObject.SetValidValue(value); 
      ReportPropertyChanged("class_Id"); 
      Onclass_IdChanged(); 
     } 
    } 
    private global::System.Int32 _class_Id; 
    partial void Onclass_IdChanging(global::System.Int32 value); 
    partial void Onclass_IdChanged(); 

    // same like this for all columns in calss data table 

下面是實體類代碼:

/// <summary> 
/// No Metadata Documentation available. 
/// </summary> 
[EdmEntityTypeAttribute(NamespaceName="tsgEntities", Name="class")] 
[Serializable()] 
[DataContractAttribute(IsReference=true)] 
public partial class @class : EntityObject 
{ 
    #region Factory Method 

    /// <summary> 
    /// Create a new class object. 
    /// </summary> 
    /// <param name="class_Description">Initial value of the class_Description property.</param> 
    /// <param name="class_Id">Initial value of the class_Id property.</param> 
    /// <param name="class_Name">Initial value of the class_Name property.</param> 
    /// <param name="class_NumSessions">Initial value of the class_NumSessions property.</param> 
    /// <param name="class_Reference">Initial value of the class_Reference property.</param> 
    public static @class Createclass(global::System.String class_Description, global::System.Int32 class_Id, global::System.String class_Name, global::System.String class_NumSessions, global::System.String class_Reference) 
    { 
     @class @class = new @class(); 
     @class.class_Description = class_Description; 
     @class.class_Id = class_Id; 
     @class.class_Name = class_Name; 
     @class.class_NumSessions = class_NumSessions; 
     @class.class_Reference = class_Reference; 
     return @class; 
    } 

    #endregion 
    #region Primitive Properties 

    /// <summary> 
    /// No Metadata Documentation available. 
    /// </summary> 
    [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)] 
    [DataMemberAttribute()] 
    public global::System.String class_Description 
    { 
     get 
     { 
      return _class_Description; 
     } 
     set 
     { 
      Onclass_DescriptionChanging(value); 
      ReportPropertyChanging("class_Description"); 
      _class_Description = StructuralObject.SetValidValue(value, false); 
      ReportPropertyChanged("class_Description"); 
      Onclass_DescriptionChanged(); 
     } 
    } 
    private global::System.String _class_Description; 
    partial void Onclass_DescriptionChanging(global::System.String value); 
    partial void Onclass_DescriptionChanged(); 


    //same like this for all coulmns 
+0

@Eranga我不知道如何來指定的EntityFramework外鍵.....我發現我已經在上面tsgentitesmodel提到的代碼了.Designer.cs和我有疑問,我需要到指定的代碼......在這個 –

+0

@eranga你會請幫助.. –

+0

可以在這一個一個的任何幫助......請 –

回答

2

如果你想創建一個關係在class_IdTable2Table1之間,該列需要在Table1主鍵 - 或者你需要穿上它唯一索引:

CREATE UNIQUE INDEX UIX01_ClassDates ON dbo.ClassDates(class_Id) 

然後你應該能夠創建兩個表之間的外鍵關係:

ALTER TABLE dbo.Classes 
ADD CONSTRAINT fk_classes_classdates 
FOREIGN KEY (Class_Id) REFERENCES dbo.ClassDates(class_Id) 

現在,一旦你做到了這一點,刷新你的E​​DMX模型文件,並且該關係現在應該自動顯示出來! (或者你可以手動將兩個類之間添加關聯讓它顯示出來)

+0

其中我需要添加此代碼......... ALTER TABLE dbo.Classes ADD CONSTRAINT fk_classes_classdates FOREIGN KEY(Class_Id)REFERENCES dbo.ClassDates(class_Id)... –

+0

@ user899271:您必須運行這些陳述一次 - 例如在SQL Server Management Studio中。 **之後**,刷新(或重新創建)您的EF模型在您的應用程序 –

+0

哦okk很多謝謝...... –