我一直在努力尝试将数据上传到Azure数据库(移动服务)数小时。我在Azure数据库上的数据模型:
我在Xamarin Forms中的模型(该类):
public class Test
{
public string Id { get; set; }
[JsonProperty("XAxis")]
public int XAxis { get; set; }
[JsonProperty("YAxis")]
public int YAxis { get; set; }
}
将数据写入Azure:
var test = new Test
{
XAxis = 100,
YAxis = 200
};
await client.GetTable<Test>().InsertAsync(test);
然而,当我执行此操作时,我将收到以下错误:
07-31 11:44:39.285 I/MonoDroid(27512): Microsoft.WindowsAzure.MobileServices.MobileServiceInvalidOperationException: Error: Bad request.
当我查看Azure后端时,我会收到有关ID应填写的投诉:
Error: [Microsoft][SQL Server Native Client 10.0][SQL Server]Cannot insert the value NULL into column 'ID', table 'my_db.database.Test'; column does not allow nulls. INSERT fails. (SqlState: 23000, Code: 515)
所以我假设我应该添加一个写入Azure的ID字段:
var test = new Test
{
Id = Convert.ToString(System.Math.Abs((int)(DateTime.Now.Ticks))),
XAxis = 100,
YAxis = 200
};
await client.GetTable<Test>().InsertAsync(test);
但是当我运行此操作时,我会收到投诉,指出您无法为属性ID指定值:
07-31 11:56:39.030 I/MonoDroid(28240): Microsoft.WindowsAzure.MobileServices.MobileServiceInvalidOperationException: Error: A value cannot be specified for property 'id'
07-31 11:56:39.030 I/MonoDroid(28240): at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () <IL 0x00011, 0x00078>
07-31 11:56:39.030 I/MonoDroid(28240): at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<ThrowAsync>m__0 (object) <IL 0x00006, 0x0006b>
07-31 11:56:39.030 I/MonoDroid(28240): at Android.App.SyncContext/<Post>c__AnonStorey0.<>m__0 () <IL 0x0000c, 0x0005b>
07-31 11:56:39.030 I/MonoDroid(28240): at Java.Lang.Thread/RunnableImplementor.Run () <IL 0x00011, 0x00097>
07-31 11:56:39.030 I/MonoDroid(28240): at Java.Lang.IRunnableInvoker.n_Run (intptr,intptr) <IL 0x0000a, 0x000a3>
07-31 11:56:39.030 I/MonoDroid(28240): at (wrapper dynamic-method) object.b57781da-7718-463b-816c-da6f6ddaedad (intptr,intptr) <IL 0x00011, 0x0003b>
07-31 11:56:39.035 W/art (28240): JNI RegisterNativeMethods: attempt to register 0 native methods for md52ce486a14f4bcd95899665e9d932190b.JavaProxyThrowable
07-31 11:56:39.037 D/AndroidRuntime(28240): Shutting down VM
我尝试将数据库字段设为int和varchar。我尝试在我的应用中更改模型(Test.cs),以便它也使用JsonProperty
作为ID字段,我已尝试使用ID&#39;, &#39;标识&#39;并且&#39; id&#39;作为Azure和C#中的字段,但没有任何方法可行。它要么抱怨必须填写ID,要么让它为空。
所以我的问题是将记录写入Azure的确切方法是什么?我应该在C#中包含ID字段还是不应该包含ID字段,我是否应该更改JsonProperty,...?
谢谢, Yenthe
答案 0 :(得分:0)
好吧,所以我找到了解决方案。虽然找到的每个信息都是关于id的int或string字段,但它应该是nvarchar
(长度255)。默认值应设置为(CONVERT([nvarchar](255),newid(),(0)))
,这样您就不必指定任何ID,它们将由Azure自动生成。
所以一个示例模型:
然后,您可以创建一个与Azure上的模型同名的类,并添加所有字段:
public class Measure
{
public string Id { get; set; }
public int XAxis { get; set; }
public int YAxis { get; set; }
public int ZAxis { get; set; }
public int LongSensor { get; set; }
}
最终将数据发送到Azure:
Measure measure = new Measure { XAxis = 100, YAxis = 200, ZAxis = 300, LongSensor = 400 };
await client.GetTable<Measure>().InsertAsync(measure);