0

TBLFIRM というデータベース テーブルがあります。acc データベース ファースト モデルを使用しています。EFはSQLを間違って準備します。このオブジェクトの何が間違っている可能性がありますか?

ありがとうございました

私の構文、非常に単純な呼び出し:

TBLFIRM d = VT.TBLFIRMs.FirstOrDefault(p => p.ID > 0);

EF 5 が準備する SQL 構文

SELECT TOP (1) 
[Extent1].[ID] AS [ID], 
[Extent1].[DISTID] AS [DISTID], 
[Extent1].[SESSIONKEY] AS [SESSIONKEY], 
[Extent1].[NAME] AS [NAME], 
[Extent1].[PHONE] AS [PHONE], 
[Extent1].[EMAIL] AS [EMAIL], 
[Extent1].[CREATEUSER] AS [CREATEUSER], 
[Extent1].[CREATEDATE] AS [CREATEDATE], 
[Extent1].[UPDATEUSER] AS [UPDATEUSER], 
[Extent1].[UPDATEDATE] AS [UPDATEDATE], 
[Extent1].[AUTHORIZEDUSERNAME] AS [AUTHORIZEDUSERNAME], 
[Extent1].[AUTHORIZEDUSEREMAIL] AS [AUTHORIZEDUSEREMAIL], 
[Extent1].[AUTHORIZEDUSERPHONE] AS [AUTHORIZEDUSERPHONE], 
[Extent1].[SENDEMAIL] AS [SENDEMAIL], 
[Extent1].[REPLYEMAIL] AS [REPLYEMAIL], 
[Extent1].[ACTIVE] AS [ACTIVE], 
[Extent1].[CANLOGIN] AS [CANLOGIN], 
[Extent1].[INTERNALNAME] AS [INTERNALNAME], 
[Extent1].[TBLDISTRIBUTOR_ID] AS [TBLDISTRIBUTOR_ID]
FROM [dbo].[TBLFIRMs] AS [Extent1]
WHERE [Extent1].[ID] > 0

コンテキスト クラス

public DbSet<TBLFIRM> TBLFIRMs { get; set; }

TBLFirm クラス

 public partial class TBLFIRM
    {
        public TBLFIRM()
        {
            this.TBLFIRMSETTINGS = new HashSet<TBLFIRMSETTING>();
            this.TBLFIRMSMTPs = new HashSet<TBLFIRMSMTP>();
            this.TBLMAILFIRMMATCHes = new HashSet<TBLMAILFIRMMATCH>();
            this.TBLMAILGROUPs = new HashSet<TBLMAILGROUP>();
            this.TBLMAILTEMPLATEs = new HashSet<TBLMAILTEMPLATE>();
            this.TBLSCHEDULEs = new HashSet<TBLSCHEDULE>();
            this.TBLUSERGROUPs = new HashSet<TBLUSERGROUP>();
            this.TBLUSERS = new HashSet<TBLUSER>();
        }

        public int ID { get; set; }
        public int DISTID { get; set; }
        public string SESSIONKEY { get; set; }
        public string NAME { get; set; }
        public string PHONE { get; set; }
        public string EMAIL { get; set; }
        public string CREATEUSER { get; set; }
        public Nullable<System.DateTime> CREATEDATE { get; set; }
        public string UPDATEUSER { get; set; }
        public Nullable<System.DateTime> UPDATEDATE { get; set; }
        public string AUTHORIZEDUSERNAME { get; set; }
        public string AUTHORIZEDUSEREMAIL { get; set; }
        public string AUTHORIZEDUSERPHONE { get; set; }
        public string SENDEMAIL { get; set; }
        public string REPLYEMAIL { get; set; }
        public Nullable<bool> ACTIVE { get; set; }
        public Nullable<bool> CANLOGIN { get; set; }
        public string INTERNALNAME { get; set; }

        public virtual TBLDISTRIBUTOR TBLDISTRIBUTOR { get; set; }
        public virtual ICollection<TBLFIRMSETTING> TBLFIRMSETTINGS { get; set; }
        public virtual ICollection<TBLFIRMSMTP> TBLFIRMSMTPs { get; set; }
        public virtual ICollection<TBLMAILFIRMMATCH> TBLMAILFIRMMATCHes { get; set; }
        public virtual ICollection<TBLMAILGROUP> TBLMAILGROUPs { get; set; }
        public virtual ICollection<TBLMAILTEMPLATE> TBLMAILTEMPLATEs { get; set; }
        public virtual ICollection<TBLSCHEDULE> TBLSCHEDULEs { get; set; }
        public virtual ICollection<TBLUSERGROUP> TBLUSERGROUPs { get; set; }
        public virtual ICollection<TBLUSER> TBLUSERS { get; set; }
    }
4

1 に答える 1

0

より深い調査の後、BRian Rogers @ Code First vs. Database Firstからの返信のおかげで、問題を見つけて修正することができました。

データベースまたはモデル ファーストにアプローチしている場合は、接続文字列にメタデータが必要です。それ以外の場合、EF はこれをコード ファースト アプローチとして解釈します。

Web サイトから EF オブジェクトを保持するライブラリを呼び出していたので、web.config の接続文字列は単純なデータベース接続でした。

<add name="EmmContext" connectionString="Data Source=.;Initial Catalog=GPMM;Persist Security Info=True;User ID=********;Pwd=******" providerName="System.Data.SqlClient"/>

に変更した後、

<add name="EmmContext" connectionString="metadata=res://*/DAL.DBModel.csdl|res://*/DAL.DBModel.ssdl|res://*/DAL.DBModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=GPMM;persist security info=True;user id=*******;password=********;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient"/>

それは魅力のように機能しました。

この特定の経験を共有したかっただけです。ありがとうブライアン・ロジャース!:-)

于 2013-09-07T16:22:50.120 に答える