2013-04-29 80 views
71

這可能是我花了數小時解決很長時間的最大浪費時間問題。值不能爲空。參數名稱:來源

var db = new hublisherEntities(); 
establishment_brands est = new establishment_brands(); 

est.brand_id = 1; 
est.establishment_id = 1; 
est.price = collection["price"]; 
est.size = collection["size"]; 

db.establishment_brands.Add(est); 
db.SaveChanges(); 

這給我的

值的誤差不能爲空。參數名:源

[ArgumentNullException的堆棧跟蹤:值不能爲空。參數名稱:源] System.Linq.Enumerable.Any(IEnumerable的1 source, Func 2謂詞) 4083335 System.Data.Entity.Internal.InternalContext.WrapUpdateException(UpdateException updateException)87
System.Data.Entity.Internal。 InternalContext.SaveChanges()193個
System.Data.Entity.Internal.LazyInternalContext.SaveChanges()+33
System.Data.Entity.DbContext.SaveChanges()+20 ......

我只想添加一個實體到表中。 ORM是EF。

+7

是不是例外信息說明?有些內容不能爲null。你的數據庫模式是什麼? – 2013-04-29 14:27:04

+0

您可能需要查看此問題及其答案:http://stackoverflow.com/questions/3244336/using-linq-to-find-item-in-a-list-but-get-value-cannot-be -null-parameter-name – 2013-04-29 14:29:08

+1

可能其中一個collectin中的條目具有空值:est.price = collection [「price」]; est.size = collection [「size」]; – MikeTWebb 2013-04-29 14:29:17

回答

27

我有一段時間回來了,答案不一定是你所期望的。當你的連接字符串錯誤時,這個錯誤信息經常會出現。

在猜測,你需要這樣的事:

<connectionStrings> 
    <add name="hublisherEntities" connectionString="Data Source=localhost;Initial Catalog=hublisher;Integrated Security=True;" providerName="System.Data.SqlClient" /> 
</connectionStrings> 
<entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> 
     <parameters> 
      <parameter value="Data Source=localhost;Initial Catalog=hublisher;Integrated Security=True" /> 
     </parameters> 
    </defaultConnectionFactory> 
</entityFramework> 

發生了什麼事是,它在尋找在錯誤的地方數據源;實體框架指定它稍有不同。如果您發佈連接字符串和EF配置,然後我們可以檢查。

+1

在我的情況下,它是代碼中的不正確的連接字符串,但仍然是連接字符串問題。 – jleach 2016-03-15 13:04:43

108

某處的DbContext內部是一個值,該值是IEnumerable和查詢與Any()(或Where()Select()或任何其他LINQ方法),但該值是null

找出您是否將查詢放在一起(您的示例代碼之外的某處),您使用的是LINQ方法,還是將IEnumerable用作參數爲NULL。

+4

這解決了我的問題,我懷疑這是OP的解決方案,即使接受的答案是不同的。 – NibblyPig 2014-06-29 09:24:21

+3

對我來說,答案是我還沒有初始化我試圖用'.Where()'過濾的List,它仍然是'null'。 – 2014-12-22 18:23:51

+0

爲了避免這種空錯誤,您應該嘗試在IEnumerable屬性中放置一個默認值或使用Any()來測試它們() – 2017-09-14 00:17:21

3

就像一個供參考,有人可能會覺得它有用。我正在追逐我的尾巴,這個錯誤差不多2天了,而且總是在思考一些大問題,並尋找可能是問題的類,最後我發現它非常愚蠢的問題,它在mypage.ascx中的標記(HTML)代碼中。問題是我有一個<asp:EntityDataSource>,這有一個包含屬性,我在這裏列出了一些其他表,並錯誤地表有一個表最近從數據庫中刪除,我從來沒有注意到它和其他實體返回null。我剛剛從包含列表中刪除了愚蠢的表格,我很樂意去。希望這可以幫助某人。

0

它可能和我的情況一樣無聊savechanges錯誤bcoz數據庫沒有外鍵和關聯添加到EDM表。我在數據庫中添加了外鍵,並在修復中添加了再生EDM。

我看到的錯誤如下: 情況1 - >使用DBContext進行EDM時 消息=值不能爲空。 參數名稱:源 在System.Linq.Enumerable.Any [TSource](IEnumerable的1 source, Func 2謂詞)

案例2 - 使用的ObjectContext用於EDM 消息=無法更新EntitySet的 '聯繫',因爲它具有當>定義查詢並且元素中不存在用於支持當前操作的元素。

(只是想扔在那裏,以防萬一有人幫助)。

0

在MVC中,查看屏幕調用Controller或Repository.cs中的方法,並將返回值賦給CSHTML中的任何控件,但該方法實際上並未在.cs/controller中實現,則CSHTML將引發NULL參數異常

8

我的理由不同於其他人,所以我想我會將它發佈給任何可能有此問題的人。

我在DbSet的實例調用計數與空的過濾器即

dbSet.Count(null); 

我發現,傳遞null這裏是造成錯誤,所以我現在所說的無參數的方法,如果過濾器爲null :

if (filter == null) 
{ 
    return dbSet.Count(); 
} 
else 
{ 
    return dbSet.Count(filter); 
} 

這個問題給我排序。這也可能是DbSet上其他方法的問題。

1

與以下溶液

1)右擊EDMX文件解決了,選擇打開,XML編輯

2)找到在EDMX實體:StorageModels元件

3)拆下所述DefiningQuery完全

4)重命名存儲:架構= 「DBO」 到架構= 「DBO」(如果存在)

5)拆下商店:名稱property

0

我得到這個錯誤,當我有一個實體屬性無效的類型。

public Type ObjectType {get;set;} 

當我刪除屬性錯誤停止發生。

0

在我的情況下,在IIS上配置Web應用程序時彈出問題,當任何記錄上的更新命令被觸發時,就會產生此錯誤。

這是App_Data上的權限問題,它被設置爲只讀。右鍵單擊該文件夾,取消選中只讀複選框,即可完成。順便說一下,爲了測試目的,我使用了App_Data文件夾中的localdb數據庫。

相關問題