2011-04-21 81 views
1

我遇到的问题,并不断收到错误Invalid object name 'dbo.atomic.address'。正如你可以在原子数据库地址中看到确实存在:实体框架抛出怪“无效的对象名称错误执行插入

enter image description here

这是CreateAddress功能。我将空值传递给addressline3addressline4。我想知道这是否是问题。我已检查.tt模板,并且Address对象没有标记为Nullable - 问题?

public static int CreateAddress(string addressline1, string addressline2, string addressline3, 
     string addressline4, string postcode, int cityid, int countryid, int clientid, 
     string tag, bool active, string notes = null) 
    { 
     using (var ctx = new atomicEntities()) 
     { 
      var a = new Address 
         { 
          ClientId = clientid, 
          AddressTag = tag, 
          AddressLine1 = addressline1, 
          AddressLine2 = addressline2, 
          AddressLine3 = addressline3, 
          AddressLine4 = addressline4, 
          CityId = cityid, 
          Postcode = postcode, 
          CountryId = countryid, 
          AddressNotes = notes, 
          Active = active, 
          Token = DateTime.UtcNow 
         }; 
      ctx.Connection.Open(); 
      ctx.Addresses.AddObject(a); 
      ctx.SaveChanges(); 
      return a.AddressId; 
     }  
    } 

只是为了参考,这是我接收与堆栈中的错误:

enter image description here

此外,我插入数据如下:

enter image description here

BusinessStreet2是空的,但我可以确认,即使在填充时仍然出现错误。

任何帮助或建议欢迎如何使这项工作! :D我已经读过它可能是一个复数或单数的问题,但我不明白我的错在哪里?

编辑从Atomic.edmx XML:如果因为

<EntityContainer Name="atomicModelStoreContainer"> 
      <EntitySet Name="address" EntityType="atomicModel.Store.address" store:Type="Tables" Schema="dbo" /> 
</EntityContainer> 
     <EntityType Name="address"> 
      <Key> 
      <PropertyRef Name="address_id" /> 
      </Key> 
      <Property Name="address_id" Type="int" Nullable="false" StoreGeneratedPattern="Identity" /> 
      <Property Name="client_id" Type="int" Nullable="false" /> 
      <Property Name="address_tag" Type="nvarchar" MaxLength="50" /> 
      <Property Name="address_line_1" Type="nvarchar" MaxLength="255" /> 
      <Property Name="address_line_2" Type="nvarchar" MaxLength="255" /> 
      <Property Name="address_line_3" Type="nvarchar" MaxLength="255" /> 
      <Property Name="address_line_4" Type="nvarchar" MaxLength="255" /> 
      <Property Name="city" Type="int" /> 
      <Property Name="postcode" Type="nvarchar" MaxLength="12" /> 
      <Property Name="country" Type="int" /> 
      <Property Name="address_notes" Type="nvarchar" MaxLength="500" /> 
      <Property Name="active" Type="bit" Nullable="false" /> 
      <Property Name="token" Type="datetime" /> 
     </EntityType> 

回答

2

经过多年的磨合,我发现了这个问题。这原来是INSERTUPDATE表上的触发器。卫生署!触发器显然未经测试,完全被遗忘:

CREATE TRIGGER AddressTrigger 
ON [address] 
FOR INSERT, UPDATE 
AS 
DECLARE @Address As Int; 
SELECT @Address = i.[address_id] FROM inserted i; 
UPDATE [dbo].[atomic].[address] 
set 
    [token] = GETDATE() 
where [address_id] = @Address; 
GO 

我依稀记得自己现在设置了这些,但自此以后就忘记了。请接受我的道歉浪费大家的时间!我永远不会得到我生命中接下来的3个小时!

+0

谢谢你的指针。我有完全相同的问题 - 更改了表名,但忘了更新触发器。相信我,我花了超过3个小时的时间来调试这个,当我放弃并Google搜索时,你的答案是正确的。荣誉。 – muruge 2012-01-25 19:25:07

0

它看起来像在映射一个问题你的数据库名称是Atomic表的正确名称是Atomic.dbo.Address。此外,EF不需要将数据库名称添加到对象名称中。

+0

感谢您的回复。我想过那件事,但不知道如何改变它?我寻找任何'硬编码'的参考,并发现没有... – dooburt 2011-04-21 12:54:19

+0

你是如何映射你的表? – 2011-04-21 13:21:56

+0

我打开了VS2010中的Atomic.edmx并从数据库执行更新......? – dooburt 2011-04-21 13:23:27

相关问题